2017-06-28 2 views
1

Ich habe Frage über Routing in MVC Ich habe eine einfache Website habe ich einen Controller namens definiert HomeController.csMVC 5 Routing Problem Action root

definiert meine public ActionResult WebPage(int id) die ID ist die ID der Seite ich bin Meine Route Anzeige wird ungefähr so ​​aussehen:

Aktuell:

http://localhost:5000/Home/WebPage/1 

Was ich will, ist:

http://localhost:5000/1 

Mein aktueller RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

Ich habe versucht, zuzuteilen mit verschiedenen Routen in RouteConfig.cs aber im stecken kann jemand mich in die richtige Richtung?

Ich habe auf StackOverflow etwas Similer zu diesem gesucht, aber nicht gefunden.

+0

Vielleicht, Ihre Aktion als 'public Action WebPage (int id) 'definieren und eine Root-Route hinzufügen:' routes.MapRoute (Name: "Root", URL: "{id}", defaults: new {controller = "Home", action = "WebPage"}); ' –

+0

Sie können nicht (sofern Sie nicht eine Routenbeschränkung erstellen, wenn der Routenwert ein' int' ist) wird diese Methode verwenden) - Sie benötigen etwas, um Ihre Routen eindeutig zu identifizieren. –

+0

Ich habe meine Antwort hier gefunden! https://StackOverflow.com/Questions/35860959/asp-net-mvc-5-dynamic-Controller-Routes –

Antwort

0

Die Antwort

in meinem Controller-Attribut helfen: [RoutePrefix("")] und meine Methode WebPage [Route("{id?}")]

[RoutePrefix("")] 
public class HomeController : Controller 
{ 
    [Route("{id?}")] 
    public ActionResult WebPage(string id) 
    { 
     return View(); 
    } 
} 

RouteConfig.cs

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "WebPage", 
       url: "{id}", 
       defaults: new { controller = "Home", action = "WebPage" } 
      ); 

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

Was Felipe vorschlägt, funktioniert, wenn Sie eine Beschränkung auf den id Wert anwenden.

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

     routes.MapRoute(
      name: "WebPage", 
      url: "{id}", 
      defaults: new { controller = "Home", action = "WebPage" }, 
      constraints: new { id = @"\d+" }); 

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

Was ist, wenn die ID ein String-Wert ist? –

+0

Die Einschränkung ist nicht erfüllt, daher versucht die Anwendung, die nächste Routenkarte zu finden, in diesem Fall die 'Default'. Wenn beispielsweise die URL "http: // hostname/x" verwendet wird, stimmt die Map "Default" tatsächlich überein, so dass die Anwendung versucht, die "Index" -Aktion des "XControllers" auszuführen. –

1

Sie sollten Route Attribut versuchen, kann es Sie

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); 

    **routes.MapMvcAttributeRoutes();** 

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

Verwenden ähnliche

[Route(“{id:int}”)] 
    public ActionResult WebPage(int id) { … }