Fase 1: creare il vincolo percorso.
public class RootRouteConstraint<T> : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
var rootMethodNames = typeof(T).GetMethods().Select(x => x.Name.ToLower());
return rootMethodNames.Contains(values["action"].ToString().ToLower());
}
}
Fase 2:
aggiungere un nuovo mapping percorso sopra la mappatura predefinita che utilizza il vincolo percorso che abbiamo appena creato. Il parametro generico dovrebbe essere la classe controller che si intende utilizzare come controller "Root".
routes.MapRoute(
"Root",
"{action}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional},
new {isMethodInHomeController = new RootRouteConstraint<HomeController>()});
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new
{controller = "Home", action = "Index", id = UrlParameter.Optional}
);
Ora si dovrebbe essere in grado di accedere ai metodi del controller a casa in questo modo: example.com/about, example.com/contact
Questo sarà influisce solo HomeController. Tutti gli altri controller avranno la funzionalità di routing predefinita.
Che ha funzionato perfettamente! Grazie .... l'ordine conta qui ... L'ho fatto esattamente prima, tuttavia ... era sotto la rotta di default che ha reso non funziona. Il tuo fantastico, grazie! – BRogers
Grazie signore .... –
Funziona davvero bene! – Kbdavis07