در ASP.NET MVC 5 یک قابلیت جدید با نام
Attribute Routing افزوده شده است که به ما این اجازه را میدهد تا Routeهای سفارشی برای کنترلرها و اکشن متدهایمان با اضافه کردن یک Attribute با نام Route تعریف کنیم.
همچنین میتوانیم ویژگی 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();
}
نحوه تعیین Default Route :
[RoutePrefix("products")]
[Route("{action=index}")]
public class ProductsController : Controller
{
public ProductsController()
{
}
public ActionResult Index()
{
return View();
}
}
نحوه تعیین Constraint برای Routeها : [Route("{id:int}")]
public ActionResult Delete(int id)
{
return View();
}
در مثال فوق گفته ایم که Id باید از نوع عدد صحیح باشد در غیر اینصورت آن را تطبیق نمیدهد.
همچنین میتوانید از عبارات Regex نیز استفاده کنید به طور مثال در کد زیر پارامتر title باید یک متن و یا عبارت فارسی باشد در غیر اینصورت تطبیقی صورت نمیگیرد:
[Route("{title:regex(\u0600-\u06FF)}")]
public ActionResult Search(string title)
{
return View();
}
در لینکی که در بالا معرفی شده لیست کامل Constraintها را میتوانید مشاهده نمائید،