2008-09-16 17 views
5

Ich versuche ASP.NET MVC Routing und natürlich über ein Problem gestolpert. Ich habe einen Abschnitt,/Admin/Pages /, und dies ist auch über/Pages/zugänglich, was nicht sein sollte. Was könnte ich vermissen?Asp.net MVC Routing mehrdeutig, zwei Pfade für die gleiche Seite

Der Code-Routing in global.asax:

public static void RegisterRoutes(RouteCollection routes) 
{ 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      "Pages", // Route name 
      "Admin/Pages/{action}/{id}", // URL with parameters 
      // Parameter defaults 
      new { controller = "Pages", action = "Index", id = "" } 
     ); 

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

    } 

Dank!

Antwort

6

Ich würde vorschlagen, eine explizite Route für/Pages/am Anfang hinzuzufügen.

Das Problem ist, dass es von der Standardroute und Ableitung behandelt Wesen:

= "Seiten"

Controller action = "Index" id = ""

, die genau die gleichen sind wie die Parameter für deine Admin-Route.

2

Sie könnten der Standardregel eine Einschränkung hinzufügen, sodass das {Controller} -Tag nicht "Pages" sein kann.

0

Sie haben in der ersten Route {action} token/Parameter, der mit der Einstellung der Standardaktion in Konflikt gerät. Versuchen Sie, den Parameternamen in Ihrer Route zu ändern, oder entfernen Sie den Standardaktionsnamen.

6

Für Routing-Probleme wie diese sollten Sie meine Route Debugger Assembly ausprobieren (nur im Test verwenden). Es kann helfen, diese Art von Problemen herauszufinden.

P.S. Wenn Sie versuchen, den Seiten-Controller zu sichern, stellen Sie sicher, dass Sie das Attribut [Autorisieren] verwenden. Verlassen Sie sich nicht nur auf die URL-Autorisierung.

+0

Dies sollte die Antwort sein, da die Indexaktionsmethode des PagesControllers gesichert werden soll. –