AKTUALIZACJA : To zostało opublikowane na codeplex . Kompletny kod źródłowy, a także wstępnie skompilowany zestaw są dostępne do pobrania. Nie miałem jeszcze czasu na umieszczenie dokumentacji na stronie, więc ten wpis SO na razie wystarczy.
AKTUALIZACJA : Dodałem kilka nowych atrybutów do obsługi 1) kolejności tras, 2) ograniczeń parametrów trasy i 3) wartości domyślnych parametrów trasy. Poniższy tekst odzwierciedla tę aktualizację.
Właściwie zrobiłem coś takiego dla moich projektów MVC (nie mam pojęcia, jak Jeff to robi przy użyciu stackoverflow). Zdefiniowałem zestaw atrybutów niestandardowych: UrlRoute, UrlRouteParameterConstraint, UrlRouteParameterDefault. Mogą być dołączane do metod akcji kontrolera MVC, aby automatycznie wiązać z nimi trasy, ograniczenia i wartości domyślne.
Przykładowe użycie:
(Zwróć uwagę, że ten przykład jest nieco wymyślony, ale demonstruje tę funkcję)
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();
}
Definicja 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; }
}
Definicja UrlRouteParameterConstraintAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteParameterConstraintAttribute : Attribute
{
public string Name { get; set; }
public string Regex { get; set; }
}
Definicja UrlRouteParameterDefaultAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteParameterDefaultAttribute : Attribute
{
public string Name { get; set; }
public object Value { get; set; }
}
Zmiany w Global.asax.cs:
Zamień wywołania MapRoute za pomocą pojedynczego wywołania funkcji RouteUtility.RegisterUrlRoutesFromAttributes:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteUtility.RegisterUrlRoutesFromAttributes(routes);
}
Definicja RouteUtility.RegisterUrlRoutesFromAttributes:
Pełne źródło jest dostępne w Codeplex . Przejdź do tej witryny, jeśli masz jakieś uwagi lub raporty o błędach.