Attribute Routing 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 url của trang chủ được lưu trữ (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 điều khiển tên là ExampleController
và một phương thức hành động bên trong nó được gọi là DoSomething
, thì url mặc định mong đợi ExampleController/DoSomething
sẽ không hoạt động nữa vì tuyến đường mặc định đã được thay đổi.
Có thể chỉnh lại này là để không gây rối với các tuyến đường mặc định và tạo các tuyến đường mới trong file RouteConfig.cs cho các hành động khác và các bộ điều khiển 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 lớp ExampleController
sẽ được ánh xạ tới url hey/now
. Nhưng điều này có thể khiến bạn buồn tẻ khi bạn muốn xác định các tuyến 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 để phù hợp với các url để 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();
}
}
Trong MVC 4, điều này có thể được thực hiện trong App_Start/RouteConfig.cs – NikolaiDante
@NikolaiDante bạn nên chắc rằng bình luận một câu trả lời như tôi gần bỏ qua nó và nó nhanh hơn câu trả lời này. :) Cảm ơn – GazB
Trong MVC 5. nếu bạn có đăng nhập biểu mẫu, khi bạn nhấp vào đăng nhập trên trang chủ, nó sẽ vẫn chuyển hướng đến bộ điều khiển Trang chủ, không phải bộ điều khiển tùy chỉnh của bạn được chỉ định trong tuyến đường. đăng ký hành động sẽ làm điều tương tự. Vì vậy, ngoài việc thay đổi routeconfig, cũng cần phải thay đổi một số mã nơi gọi RedirectionToAction ("Index", "Home") và thay thế nó bằng tên bộ điều khiển và hành động của riêng bạn. – anIBMer