Вот как я это делаю, я создаю собственный маршрут.Это также заставляет помощников, таких как Html.ActionLink
, создавать также управляемые маршруты.
Сначала я расширяю Route
пользовательским объектом (скажем, LowerCaseRoute
) и переопределяю метод GetVirtualPath
следующим образом:
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
var path = base.GetVirtualPath(requestContext, values);
if (path != null)
{
// you could do lots more here, like replacing odd characters with - etc.
path.VirtualPath = path.VirtualPath.ToLower();
}
return path;
}
Затем я создаю настраиваемого помощника для сопоставления этого маршрута следующим образом:
public static LowerCaseRoute MapLowerCaseRoute(this RouteCollection routes, string name, string url, object defaults)
{
var route = new LowerCaseRoute(url, new MvcRouteHandler());
route.Defaults = new RouteValueDictionary(defaults);
route.DataTokens = new RouteValueDictionary();
route.DataTokens.Add("RouteName", name);
routes.Add(name, route);
return route;
}
Таким образом, вы можете создать маршрут в вашем global.asax
следующим образом:
RouteTable.Routes.MapLowerCaseRoute("routeName", "baseurl/someother/{param}", { controller = "Controller", param = UrlParameter.Optional });
Это сохраняет все аккуратным и очевидным внутри проекта и дает вам больше возможностей для манипулирования вашими маршрутами.