2008-09-16 35 views
5

Estoy probando el enrutamiento MVC de ASP.NET y, por supuesto, tropecé con un problema. Tengo una sección,/Admin/Pages /, y también se puede acceder a través de/Pages /, que no debería ser. ¿Qué podría estar perdiendo?Enrutamiento Asp.net MVC ambiguo, dos rutas para la misma página

El código de enrutamiento en 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 = "" } 
     ); 

    } 

Gracias!

Respuesta

6

Sugiero agregar una ruta explícita para/Pages/al principio.

El problema es que está siendo manejado por la ruta por defecto y derivando:

controlador = "Páginas" action = "Índice" id = ""

que son exactamente los mismos que los parámetros para su ruta de administrador.

2

Puede agregar una restricción a la regla predeterminada para que la etiqueta {Controller} no pueda ser "Páginas".

0

Tiene en usted el primer token/parámetro de ruta {acción} que entra en conflicto con la configuración de la acción predeterminada. Intente cambiar el nombre del parámetro en su ruta o elimine el nombre predeterminado de la acción.

6

Para problemas de enrutamiento como este, debe probar mi ensamblaje Route Debugger (usar solo en las pruebas). Puede ayudar a resolver este tipo de problemas.

P.S. Si intenta proteger el controlador de Pages, asegúrese de usar el atributo [Authorize]. No confíe únicamente en la autorización de URL.

+0

Esta debería ser la respuesta, ya que la intención es asegurar el método de acción Index del PagesController. –

Cuestiones relacionadas