Paso 1: Crear la restricción de ruta.
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());
}
}
Paso 2:
agregar una nueva asignación de rutas por encima de su asignación predeterminada que utiliza la restricción de ruta que acabamos de crear. El parámetro genérico debe ser la clase de controlador que planea usar como su controlador "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}
);
Ahora usted debería ser capaz de acceder a sus métodos de controlador de casa, así: example.com/about, example.com/contact
Esto sólo afecta HomeController. Todos los demás controladores tendrán la funcionalidad de enrutamiento predeterminada.
¡Eso funcionó a la perfección! Gracias ... el orden importa aquí ... Lo hice exactamente antes, sin embargo ... estaba por debajo de la ruta Predeterminada lo que hizo que no funcionara. Tu increíble, gracias! – BRogers
Gracias señor .... –
¡Funciona muy bien! – Kbdavis07