Định tuyến thuộc tính trong MVC 5
Trước MVC 5, bạn có thể ánh xạ URL tới các hành động và bộ điều khiển cụ thể bằng cách gọi routes.MapRoute(...)
trong tệp RouteConfig.cs. Đây là nơi lưu trữ url cho trang chủ ( Home/Index
). Tuy nhiên, nếu bạn sửa đổi tuyến đường mặc định như được hiển thị bên dưới,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
hãy nhớ rằng điều này sẽ ảnh hưởng đến URL của các hành động và bộ điều khiển khác. Ví dụ: nếu bạn có một lớp bộ điều khiển được đặt tên ExampleController
và một phương thức hành động bên trong nó được gọi DoSomething
, thì url mặc định dự kiếnExampleController/DoSomething
sẽ không hoạt động nữa vì tuyến mặc định đã bị thay đổi.
Một giải pháp cho việc này là không gây rối với tuyến đường mặc định và tạo các tuyến đường mới trong tệp RouteConfig.cs cho các hành động và bộ điều khiển khác như vậy,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Example",
url: "hey/now",
defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);
Bây giờ DoSomething
hành động của ExampleController
lớp sẽ được ánh xạ tới url hey/now
. Nhưng điều này có thể trở nên tẻ nhạt khi bạn muốn xác định các tuyến đường cho các hành động khác nhau. Vì vậy, trong MVC 5 bây giờ bạn có thể thêm các thuộc tính để khớp url với các hành động như vậy,
public class HomeController : Controller
{
// url is now 'index/' instead of 'home/index'
[Route("index")]
public ActionResult Index()
{
return View();
}
// url is now 'create/new' instead of 'home/create'
[Route("create/new")]
public ActionResult Create()
{
return View();
}
}