2008-09-16 4 views
5

J'essaie le routage ASP.NET MVC et j'ai bien sûr trébuché sur un problème. J'ai une section,/Admin/Pages /, et c'est aussi accessible par/Pages /, ce qui ne devrait pas. Que pourrais-je manquer?Le routage MVC Asp.net ambigu, deux chemins pour la même page

Le code de routage dans 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 = "" } 
     ); 

    } 

Merci!

Répondre

6

Je suggère d'ajouter une route explicite pour/Pages/au début.

Le problème est qu'il est géré par la route par défaut et dériver:

controller = "Pages" action = "Index" id = ""

qui sont exactement les mêmes que les paramètres pour votre route d'administration.

2

Vous pouvez ajouter une contrainte à la règle par défaut afin que la balise {Controller} ne puisse pas être "Pages".

0

Vous avez dans votre première route {action} jeton/paramètre qui entre en conflit avec le réglage de l'action par défaut. Essayez de modifier le nom du paramètre dans votre itinéraire ou supprimez le nom de l'action par défaut.

6

Pour les problèmes de routage comme celui-ci, vous devez essayer mon assembly Route Debugger (à utiliser uniquement pour les tests). Cela peut aider à comprendre ces types de problèmes.

P.S. Si vous essayez de sécuriser le contrôleur Pages, veillez à utiliser l'attribut [Autoriser]. Ne vous fiez pas uniquement à l'autorisation d'URL.

+0

Cela devrait être la réponse car l'intention est de sécuriser la méthode d'action Index du PagesController. –