ОНОВЛЕННЯ : Це було розміщено на codeplex . Повний вихідний код, а також попередньо скомпільована збірка доступні для завантаження. Я ще не встиг розмістити документацію на сайті, тож цієї публікації SO наразі буде достатньо.
ОНОВЛЕННЯ : Я додав кілька нових атрибутів для обробки 1) упорядкування маршруту, 2) обмеження параметрів маршруту та 3) значень параметрів маршруту за замовчуванням. Текст нижче відображає це оновлення.
Я насправді зробив щось подібне для своїх проектів MVC (я не уявляю, як Джефф робить це за допомогою stackoverflow). Я визначив набір спеціальних атрибутів: UrlRoute, UrlRouteParameterConstraint, UrlRouteParameterDefault. Їх можна приєднати до методів дії контролера MVC, щоб автоматично прив’язати до них маршрути, обмеження та за замовчуванням.
Приклад використання:
(Зверніть увагу, що цей приклад дещо надуманий, але він демонструє особливості)
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();
}
Визначення 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; }
}
Визначення UrlRouteParameterConstraintAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteParameterConstraintAttribute : Attribute
{
public string Name { get; set; }
public string Regex { get; set; }
}
Визначення UrlRouteParameterDefaultAttribute:
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class UrlRouteParameterDefaultAttribute : Attribute
{
public string Name { get; set; }
public object Value { get; set; }
}
Зміни до Global.asax.cs:
Замініть виклики MapRoute одним викликом RouteUtility.RegisterUrlRoutesFromAttributes:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteUtility.RegisterUrlRoutesFromAttributes(routes);
}
Визначення RouteUtility.RegisterUrlRoutesFromAttributes:
Повне джерело розміщено на codeplex . Будь ласка, перейдіть на сайт, якщо у вас є відгуки або повідомлення про помилки.