Controller
‫رحیمی‬ ‫رضا‬
‫تابستان‬95
Rtwo.ir
‫بحث‬ ‫هدف‬
‫با‬ ‫آشنایی‬controller
‫با‬ ‫آشنایی‬Routing
‫با‬ ‫آشنایی‬Filter‫ها‬
‫با‬ ‫آشنایی‬Area
‫نوشتن‬ ‫به‬ ‫شروع‬controller
‫مطالب‬ ‫تیتر‬
Controller‫و‬Action‫چیست؟‬
‫های‬ ‫خروجی‬ ‫انواع‬Action‫ها‬
‫مسیریابی‬Action‫ها‬
‫کدام‬ ‫رسد‬ ‫می‬ ‫درخواستی‬ ‫وقتی‬action‫شود؟‬ ‫می‬ ‫انتخاب‬ ‫اجرا‬ ‫برای‬
‫اند‬ ‫چگونه‬ ‫ها‬ ‫مسیریابی‬ ‫در‬ ‫ها‬ ‫اولویت‬
‫شود‬ ‫می‬ ‫تعریف‬ ‫چگونه‬ ‫و‬ ‫چیست‬ ‫فیلتر‬
‫ها‬ ‫فیلتر‬ ‫انواع‬
Configuring Filters--->dot net core
Authorization Filters
Resource Filters--->dot net core
Action Filters
Exception Filters
Result Filters
‫با‬ ‫آشنایی‬Area
Controller‫و‬Action‫چیست‬
Action‫هر‬ ‫باشد‬ ‫می‬ ‫تابع‬Action‫می‬ ‫پاسخ‬ ‫مرورگر‬ ‫سمت‬ ‫از‬ ‫رسیده‬ ‫درخواست‬ ‫یک‬ ‫به‬
‫دهد‬.
‫در‬ASP.NET MVC‫مفهوم‬Controller‫منطقی‬ ‫بندی‬ ‫دسته‬ ‫برای‬ ‫باشد‬ ‫می‬ ‫کالسی‬ ،
‫از‬ ‫گروهی‬Action‫ها‬.
‫کاری‬ ‫حوزه‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫بندی‬ ‫دسته‬ ‫این‬action‫قوانین‬ ‫اعمال‬ ‫قابلیت‬ ‫و‬ ‫باشد‬ ‫می‬ ‫ها‬
‫به‬ ‫جمعی‬ ‫دسته‬Action‫دهد‬ ‫می‬ ‫را‬ ‫ها‬–‫مانند‬‫کنترل‬ ، ‫کش‬ ، ‫مسیریابی‬ ‫برای‬ ‫قوانینی‬
‫دسترسی‬
‫پوشه‬ ‫در‬ ‫ها‬ ‫کنترل‬ ‫فایل‬“Controllers”‫گیرند‬ ‫می‬ ‫قرار‬.
‫کالس‬ ‫از‬ ‫کنترلر‬ ‫کالس‬Microsoft.AspNetCore.Mvc.Controller‫برد‬ ‫می‬ ‫ارث‬.
‫به‬ ‫باید‬ ‫کنترلر‬ ‫کالس‬ ‫نام‬Controller‫شود‬ ‫ختم‬–‫مانند‬AccountController
HTTP requests verb
‫طریق‬ ‫از‬ ‫کالینت‬ ‫های‬ ‫درخواست‬HTTP verb‫شوند‬ ‫می‬ ‫مشخص‬ ‫ها‬.
‫این‬‫از‬ ‫ها‬ ‫درخواست‬‫سرور‬‫انجام‬ ‫برایشان‬ ‫را‬ ‫کاری‬ ‫تا‬ ‫خواهد‬ ‫می‬‫دهد‬
‫انواع‬verb‫ها‬:
 GET
 POST
 PUT
 DELETE
 Head
 Trace
 OPTIONS
“
”
‫یک‬ ‫هر‬ ‫برای‬ ‫نیز‬ ‫یکسان‬ ‫آدرس‬ ‫یک‬ ‫در‬
‫از‬http verb‫برای‬ ‫اکشنی‬ ‫یک‬ ‫باید‬ ‫ها‬
‫باشد‬ ‫موجود‬ ‫پاسخگویی‬
‫های‬ ‫خروجی‬ ‫انواع‬Action
‫یاب‬ ‫مسیر‬‫ی‬
‫یابی‬ ‫مسیر‬action‫ها‬
http://zanjandotnet.ir/home/index
First segment Second segment
‫خواهیم‬ ‫می‬ ‫مسیریاب‬ ‫از‬ ‫که‬ ‫ای‬ ‫خروجی‬ ‫و‬ ‫ها‬ ‫آدرس‬
URL‫شده‬ ‫درخواست‬ Action‫انتخابی‬
http://example.com/Users/Edit/5 UsersController.Edit(5)
http://example.com/Users/Edit UsersController.Edit()
http://example.com/Users UsersController.Index()
http://example.com HomeController.Index()
‫قبل‬ ‫از‬ ‫را‬ ‫نیاز‬ ‫مورد‬ ‫آدرسهای‬ ‫باید‬‫بکنیم‬ ‫تعریف‬‫مسیریابی‬ ‫تا‬‫بتونه‬
‫به‬ ‫را‬ ‫درخواست‬Action‫دهد‬ ‫تحویل‬ ‫درست‬
‫مسیریابی‬ ‫قوانین‬ ‫تعریف‬
RouteConfig.cs
Global.asax.cs
‫کند‬ ‫می‬ ‫کار‬ ‫چگونه‬ ‫یابی‬ ‫مسیر‬
“{controller} /{action}”
“home/index”
“anything/willdo”
=============================
“abc{controller} / {action}”
“abchome / whatever”
==================
“abc{controller} / {action}”
“home / whatever”
‫شده‬ ‫تعریف‬ ‫مسیرهای‬ ‫در‬ ‫اولویت‬
RouteData
‫مجموعه‬Key Value‫کند‬ ‫می‬ ‫ایجاد‬ ‫مسیریاب‬ ‫که‬ ‫هایی‬
‫توسط‬ ‫مجموعه‬ ‫این‬model binder‫گیرد‬ ‫می‬ ‫قرار‬ ‫استفاده‬ ‫مورد‬ ‫کنترلر‬ ‫خود‬ ‫یا‬ ‫و‬
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}«
);
“product/index/3”
Variable value
controller Product
action Index
id 3
RouteData
‫فرض‬ ‫پیش‬ ‫مقادیر‬
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { id=3 }
);
“product/index”
Variable Value
controller Product
action Index
Id 3
‫اختیاری‬ ‫مقادیر‬
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {action = "Index“, id=UrlParameter.Optinal}
);
• “product/index/3”
• “product/index”
Variable value
controller Product
action Index
id 3
Variable value
controller Product
action index
Namespace‫مسیریابی‬ ‫در‬
IgnoreRoute
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
404
‫فیلتر‬
‫کد‬ ‫دستکاری‬
‫فیلتر‬‫چیست‬
‫فیلتر‬،‫اجرا‬ ‫جهت‬ ‫را‬ ‫برنامه‬ ‫منطق‬ ‫توانید‬‫می‬ ‫شما‬ ‫که‬ ‫است‬ ‫سفارشی‬ ‫کالس‬ ‫یک‬ ،‫ب‬ ‫یا‬ ‫قبل‬‫از‬ ‫عد‬
‫اجرای‬‫یک‬Action،‫نمایید‬ ‫سازی‬ ‫پیاده‬ ‫آن‬ ‫در‬.
‫می‬ ‫معرفی‬ ‫چگونه‬ ‫فیلتر‬‫شود‬
‫روش‬ ‫به‬Attribute‫روی‬ ‫بر‬Action‫یا‬ ‫ها‬Controller‫ها‬
‫سراسری‬ ‫بصورت‬
‫شکل‬ ‫به‬ ‫استفاده‬attribute
[HandleError]
[Authorize]
public class CourseController : Controller
{
[OutputCache]
[RequireHttps]
public ActionResult Net( string name )
{
ViewBag.Course = BL.GetCourse(name);
return View();
}
}
‫معرفی‬‫فایل‬ ‫در‬ ‫سراسری‬ ‫بصورت‬Global.asax
GobalFilters.Filters.Add(new AuthorizationFilterA() { Order = 2});
‫اولویت‬ ‫و‬ ‫انواع‬‫فیلترها‬
.1Authorization filters:‫این‬‫در‬ ‫دیگری‬ ‫فیلتر‬ ‫یا‬ ‫متد‬ ‫هر‬ ‫اجرای‬ ‫از‬ ‫پیش‬ ‫فیلترها‬ ‫نوع‬
‫کنند‬‫می‬ ‫فراهم‬ ‫را‬‫آن‬ ‫اجرای‬ ‫لغو‬ ‫امکان‬ ‫و‬ ‫شده‬ ‫اجرا‬ ‫جاری‬ ‫کنترلر‬.
.2Action filters:‫پیش‬‫و‬‫از‬ ‫پس‬‫اجرای‬‫پیش‬ ‫همچنین‬ ‫و‬ ‫شوند‬‫می‬ ‫اجرا‬ ‫جاری‬ ‫کنترلر‬ ‫متدهای‬
‫متدها‬ ‫نهایی‬ ‫خروجی‬ ‫ارائه‬ ‫از‬.‫یک‬ ‫رندر‬ ‫نحوه‬ ‫توان‬‫می‬ ‫مثال‬ ‫برای‬ ‫ترتیب‬ ‫این‬ ‫به‬View‫کنترل‬ ‫تحت‬ ‫را‬
‫گرفت‬
.3Result filters:‫به‬ ‫شبیه‬ ‫بسیار‬ActionFilter‫پیش‬ ‫تنها‬ ‫که‬ ‫تفاوت‬ ‫این‬ ‫با‬ ‫است‬‫از‬
‫پس‬ ‫همچنین‬ ‫و‬ ‫متد‬ ‫نتیجه‬ ‫بازگرداندن‬‫از‬‫گردد‬‫می‬ ‫فراخوانی‬ ،‫متد‬ ‫اجرای‬
.4Exception filters:‫شد؛‬ ‫خواهند‬ ‫اجرا‬ ‫همواره‬ ،‫دیگر‬ ‫فیلترهای‬ ‫تمامی‬ ‫اجرای‬ ‫از‬ ‫پس‬
‫خیر‬ ‫یا‬ ‫است‬ ‫داده‬ ‫رخ‬ ‫استثنایی‬ ‫بین‬ ‫این‬ ‫در‬ ‫آیا‬ ‫اینکه‬ ‫از‬ ‫صرفنظر‬
‫در‬ ‫اولویت‬‫نوع‬ ‫هم‬ ‫فیلترهای‬
public class HomeController : Controller
{
[AuthorizationFilterA(Order = 2)]
[AuthorizationFilterB(Order = 1)]
public ActionResult Index()
{
return View();
}
}
‫اجرا‬ ‫ترتیب‬
‫دلخواه‬ ‫های‬ ‫فیلتر‬
‫دلخواه‬ ‫فیلتر‬ ‫افزودن‬ ‫نحوه‬
‫اول‬ ‫روش‬:‫کالس‬ ‫از‬ ‫بری‬ ‫ارث‬ ‫و‬ ‫فیلترها‬ ‫انواع‬ ‫از‬ ‫یکی‬ ‫اینترفیس‬ ‫سازی‬ ‫پیاده‬FilterAttribute
‫دوم‬ ‫روش‬:‫از‬ ‫بری‬ ‫ارث‬ActionFilterAttribute
‫سوم‬ ‫روش‬:‫کنترلر‬ ‫داخل‬ ‫سازی‬ ‫پیاده‬
‫چهارم‬ ‫روش‬:‫در‬ ‫مهیای‬ ‫و‬ ‫توکار‬ ‫فیلترهای‬ ‫کالس‬ ‫از‬ ‫بری‬ ‫ارث‬MVC‫آن‬ ‫متدهای‬ ‫تحریف‬ ‫و‬
Authorization Filter
Action Filter
Result Filter
Exception Filter
‫مثال‬
public class MyExceptionAttribute: FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (!filterContext.ExceptionHandled &&
filterContext.Exception is NullReferenceException)
{
filterContext.Result =
new RedirectResult("/MyError.html");
filterContext.ExceptionHandled = true;
}
}
}
Area
‫کد‬ ‫به‬ ‫بخشی‬ ‫نظم‬
Areas
public class AdminAreaRegistration : AreaRegistration {
public override string AreaName {
get { return "Admin"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
Areas
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);

Controller in asp.net mvc

Editor's Notes

  • #20 “To be clear, it is not that the value of id is null when no corresponding segment is supplied; rather, the case is that an id variable is not defined” To distinguish if user sent a value or not Separation of concerns (defaults in routing?)