2012-10-10 8 views

risposta

47

provare qualcosa di simile:

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

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

+0

Grazie signore .... –

+0

Funziona davvero bene! – Kbdavis07

6

Prova questo. Rende anche i tuoi URL in lettere minuscole.

 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 } 
     ); 

E nel controller casa:

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

Ricordare che è possibile specificare i collegamenti in minuscolo e viene visualizzato anche in lettere minuscole nella barra degli indirizzi. Non è case sensitive. –

2

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.

+4

Non copiare/incollare la risposta a più domande. Se sei in grado di copiare e incollare, la domanda è probabilmente un duplicato e dovrebbe essere chiusa in quanto tale. – Andy