Jos reititykseen haluaa jotain erityistä logiikkaa, voi tehdä oman luokan sitä varten. Tällaisen luokan tulee periytyä System.Web.Routing.RouteBase-luokasta (suoraan tai jonkun muun luokan kautta). Helpoin tapa on periä luokka System.Web.Routing.Route ja ylikirjoittaa vain ne metodit, joita tarvitsee muuttaa.
Esim. kun luodaan linkkejä tai polkuja (käyttäen HtmlHelper- tai UrlHelper-luokkia) tulee poluun isoja kirjaimia, koska Controller-luokan ja sen Action-metodien nimet sisältävät isoja kirjaimia.
@Html.ActionLink("Tuotelista","Listaa","Tuotteet")
antaisi linkille poluksi Tuotteet/Listaa
Jos haluaa polun olevan tuotteet/listaa , voi tehdä oman reitin, joka muuttaa kirjaimet pieniksi
using System.Web.Routing;
namespace Esimerkki
{
public class LowercaseRoute : Route
{
public LowercaseRoute(string url, IRouteHandler routeHandler) : base(url, routeHandler) { }
public LowercaseRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler) : base(url, defaults, routeHandler) { }
public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler) : base(url, defaults, constraints, routeHandler) { }
public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler) : base(url, defaults, constraints, dataTokens, routeHandler) { }
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
var path = base.GetVirtualPath(requestContext, values);
path.VirtualPath = path.VirtualPath.ToLowerInvariant();
return path;
}
}
}
ja käyttää sitä reittimäärittelyissä
var route = new LowercaseRoute("{controller}/{action}", new RouteValueDictionary(new { controller = "Home", action = "Index" }), new MvcRouteHandler());
routes.Add(route);