CẬP NHẬT : Cái này đã được đăng trên codeplex . Mã nguồn hoàn chỉnh cũng như tập hợp được biên dịch trước có sẵn để tải xuống. Tôi chưa có thời gian để đăng tài liệu trên trang web, vì vậy bài đăng SO này sẽ phải đủ cho bây giờ.
CẬP NHẬT : Tôi đã thêm một số thuộc tính mới để xử lý 1) thứ tự tuyến, 2) ràng buộc tham số tuyến và 3) giá trị mặc định của tham số tuyến. Văn bản dưới đây phản ánh cập nhật này.
Tôi đã thực sự làm điều gì đó như thế này cho các dự án MVC của mình (tôi không biết Jeff làm như thế nào với stackoverflow). Tôi đã xác định một tập hợp các thuộc tính tùy chỉnh: UrlRoute, UrlRouteParameterConstraint, UrlRouteParameterDefault. Chúng có thể được gắn vào các phương thức hành động của bộ điều khiển MVC để khiến các tuyến, ràng buộc và mặc định tự động liên kết với chúng.
Ví dụ sử dụng:
(Lưu ý rằng ví dụ này hơi giả tạo nhưng nó thể hiện tính năng)
public class UsersController : Controller
{
[UrlRoute(Path = "users")]
public ActionResult Index()
{
return View();
}
[UrlRoute(Path = "users/{userId}")]
[UrlRouteParameterConstraint(Name = "userId", Regex = @"\d+")]
public ActionResult UserProfile(int userId)
{
return View();
}
[UrlRoute(Path = "users/admin", Order = -10)]
public ActionResult AdminProfile()
{
return View();
}
[UrlRoute(Path = "users/{userId}/posts/{dateRange}")]
[UrlRouteParameterConstraint(Name = "userId", Regex = @"\d+")]
[UrlRouteParameterDefault(Name = "dateRange", Value = "all")]
public ActionResult UserPostsByTag(int userId, string dateRange)
{
return View();
}
Định nghĩa của UrlRouteAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteAttribute : Attribute
{
public string Name { get; set; }
public string Path { get; set; }
public int Order { get; set; }
}
Định nghĩa của UrlRouteParameterConstraintAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteParameterConstraintAttribute : Attribute
{
public string Name { get; set; }
public string Regex { get; set; }
}
Định nghĩa của UrlRouteParameterDefaultAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteParameterDefaultAttribute : Attribute
{
public string Name { get; set; }
public object Value { get; set; }
}
Các thay đổi đối với Global.asax.cs:
Thay thế các lệnh gọi tới MapRoute, bằng một lệnh gọi đến hàm RouteUtility.RegisterUrlRoutesFromAttributes:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteUtility.RegisterUrlRoutesFromAttributes(routes);
}
Định nghĩa của RouteUtility.RegisterUrlRoutesFromAttributes:
Nguồn đầy đủ được up trên codeplex . Vui lòng truy cập trang web nếu bạn có bất kỳ phản hồi hoặc báo cáo lỗi nào.