UPDATE : Dies wurde auf Codeplex gepostet. Der vollständige Quellcode sowie die vorkompilierte Assembly stehen zum Download bereit. Ich hatte noch keine Zeit, die Dokumentation auf der Website zu veröffentlichen, daher muss dieser SO-Beitrag vorerst ausreichen.
UPDATE : Ich habe einige neue Attribute hinzugefügt, um 1) Routenreihenfolge, 2) Routenparametereinschränkungen und 3) Routenparameter-Standardwerte zu behandeln. Der folgende Text spiegelt dieses Update wider.
Ich habe tatsächlich so etwas für meine MVC-Projekte gemacht (ich habe keine Ahnung, wie Jeff es mit Stackoverflow macht). Ich habe eine Reihe von benutzerdefinierten Attributen definiert: UrlRoute, UrlRouteParameterConstraint, UrlRouteParameterDefault. Sie können an MVC-Controller-Aktionsmethoden angehängt werden, damit Routen, Einschränkungen und Standardeinstellungen automatisch an sie gebunden werden.
Anwendungsbeispiel:
(Beachten Sie, dass dieses Beispiel etwas erfunden ist, aber die Funktion demonstriert.)
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();
}
Definition von 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; }
}
Definition von UrlRouteParameterConstraintAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteParameterConstraintAttribute : Attribute
{
public string Name { get; set; }
public string Regex { get; set; }
}
Definition von UrlRouteParameterDefaultAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteParameterDefaultAttribute : Attribute
{
public string Name { get; set; }
public object Value { get; set; }
}
Änderungen an Global.asax.cs:
Ersetzen Sie Aufrufe von MapRoute durch einen einzelnen Aufruf der Funktion RouteUtility.RegisterUrlRoutesFromAttributes:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteUtility.RegisterUrlRoutesFromAttributes(routes);
}
Definition von RouteUtility.RegisterUrlRoutesFromAttributes:
Die vollständige Quelle ist auf Codeplex verfügbar . Bitte besuchen Sie die Website, wenn Sie Feedback oder Fehlerberichte haben.