2012-10-10 9 views

Antwort

47

versuchen, etwas wie folgt aus:

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

Das hat perfekt funktioniert! Danke ... die Reihenfolge ist hier wichtig ... Ich habe das aber schon früher gemacht ... es war unter der Standardroute, die es nicht funktionierte. Dein ehrfürchtiger, danke! – BRogers

+0

Danke Sir .... –

+0

Funktioniert wirklich gut! – Kbdavis07

6

Versuchen Sie dies. Es macht auch Ihre URLs Kleinbuchstaben.

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

Und in Ihrem Home-Controller:

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

Denken Sie daran, dass Sie die Links in Kleinbuchstaben angeben können und es auch als Kleinbuchstaben in der Adressleiste angezeigt wird. Es ist nicht Groß-und Kleinschreibung. –

2

Schritt 1: die Route Constraint erstellen.

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

Schritt 2:
eine neue Route Mapping über den Standardzuordnung hinzufügen, die die Route Einschränkung verwendet, die wir gerade erstellt hat. Der generische Parameter sollte die Controller-Klasse sein, die Sie als "Root" -Controller verwenden möchten.

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

Jetzt sollten Sie in der Lage sein zu Hause Methoden Controller wie so zuzugreifen: example.com/about, example.com/contact

Dies wird nur Homecontroller beeinflusst. Alle anderen Controller haben die Standard-Routing-Funktionalität.

+4

Kopieren Sie Ihre Antwort nicht auf mehrere Fragen. Wenn Sie kopieren und einfügen können, ist die Frage wahrscheinlich ein Duplikat und sollte als solche geschlossen werden. – Andy