2012-10-10 16 views

Respuesta

47

intentar algo como esto:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "OnlyAction", 
     "{action}", 
     new { controller = "Home", action = "Index" } 
    ); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 
+0

¡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

+0

Gracias señor .... –

+0

¡Funciona muy bien! – Kbdavis07

6

Prueba esto. También hace que sus URL sean minúsculas.

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.LowercaseUrls = true; 

     routes.MapMvcAttributeRoutes(); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

Y en el controlador de Inicio:

[Route("About")] 
    public ActionResult About() 
    { 
     return View(); 
    } 
+0

Recuerde que puede especificar los enlaces en minúscula y que también se muestran en minúscula en la barra de direcciones. No es sensible a mayúsculas y minúsculas. –

2

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.

+4

No copie/pegue su respuesta a preguntas múltiples. Si puede copiar y pegar, la pregunta probablemente sea un duplicado y debería cerrarse como tal. – Andy