اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
در ASP.NET MVC 5 یک قابلیت جدید با نام Attribute Routing افزوده شده است که به ما این اجازه را میدهد تا Routeهای سفارشی برای کنترلرها و اکشن متدهایمان با اضافه کردن یک Attribute با نام Route تعریف کنیم.
همچنین میتوانیم ویژگی RoutePrefix نیز برای کنترلرهایمان تعریف کنیم تا همهی اکشن متدها نیز از آن پیروی کنند. این ویژگی را با ذکر یک مثال معرفی میکنیم :
ابتدا لازم است این ویژگی را در کلاس RouteConfig فعال کنیم :
قدم بعدی تنها افزودن Attributeهای ذکر شده به کنترلر و اکشن متدهایمان میباشد، به طور مثال ما در اینجا یک کنترلر با نام ProductController ایجاد کرده ایم و کنترلر را با ویژگی RoutePrefix مزین کرده ایم که در این حالت به ASP.NET MVC میگویم که تمام اکشن متدهای داخل این کنترلر با products شروع شوند :
همانطور که در کد فوق ملاحظه میکنید اکشن متد Index را با افزودن ویژگی Route که آدرس ~/products را تطبیق میدهد تعیین کرده ایم.
نحوه تعیین Optional URI Parameter :
کافی است علامت سوال را به آخر پارامتر اضافه کنیم :
نحوه تعیین Default Route :
نحوه تعیین Constraint برای Routeها :
در مثال فوق گفته ایم که Id باید از نوع عدد صحیح باشد در غیر اینصورت آن را تطبیق نمیدهد.
همچنین میتوانید از عبارات Regex نیز استفاده کنید به طور مثال در کد زیر پارامتر title باید یک متن و یا عبارت فارسی باشد در غیر اینصورت تطبیقی صورت نمیگیرد:
در لینکی که در بالا معرفی شده لیست کامل Constraintها را میتوانید مشاهده نمائید،
همچنین میتوانیم ویژگی RoutePrefix نیز برای کنترلرهایمان تعریف کنیم تا همهی اکشن متدها نیز از آن پیروی کنند. این ویژگی را با ذکر یک مثال معرفی میکنیم :
ابتدا لازم است این ویژگی را در کلاس RouteConfig فعال کنیم :
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapMvcAttributeRoutes(); // ... }
قدم بعدی تنها افزودن Attributeهای ذکر شده به کنترلر و اکشن متدهایمان میباشد، به طور مثال ما در اینجا یک کنترلر با نام ProductController ایجاد کرده ایم و کنترلر را با ویژگی RoutePrefix مزین کرده ایم که در این حالت به ASP.NET MVC میگویم که تمام اکشن متدهای داخل این کنترلر با products شروع شوند :
[RoutePrefix("products")] public class ProductsController : Controller { public ProductsController() { } [Route] public ActionResult Index() { return View(); } }
همانطور که در کد فوق ملاحظه میکنید اکشن متد Index را با افزودن ویژگی Route که آدرس ~/products را تطبیق میدهد تعیین کرده ایم.
نحوه تعیین Optional URI Parameter :
کافی است علامت سوال را به آخر پارامتر اضافه کنیم :
[Route("{id?}")] public ActionResult Index(int id) { return View(); }
[RoutePrefix("products")] [Route("{action=index}")] public class ProductsController : Controller { public ProductsController() { } public ActionResult Index() { return View(); } }
[Route("{id:int}")] public ActionResult Delete(int id) { return View(); }
همچنین میتوانید از عبارات Regex نیز استفاده کنید به طور مثال در کد زیر پارامتر title باید یک متن و یا عبارت فارسی باشد در غیر اینصورت تطبیقی صورت نمیگیرد:
[Route("{title:regex(\u0600-\u06FF)}")] public ActionResult Search(string title) { return View(); }