2011-09-28 13 views
5

Tengo un nuevo proyecto asp.net mvc 3. No modifiqué las rutas de ninguna manera. Tengo un controlador llamado PageController y otra llamada de controlador ContentController.¿Por qué en ASP.NET MVC 3 la ruta predeterminada no funciona para un controlador llamado "ContentController"?

Cuando navego a domain.com/Page, la acción de índice en el controlador de página se ejecuta como se esperaba y muestra la vista de índice.

Cuando busco domain/Content obtengo un error 404. Si navego a domain.com/Content/Index, funciona bien.

¿Cómo soluciono el problema de esta única ruta?

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

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

He intentado añadir una ruta adicional:

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

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

    } 

Pero la ruta adicional no cambió el comportamiento de la aplicación.

¿Qué podría estar causando esto?

+0

Solo para aclarar, se puede añadir el código del 'ContentController' –

+0

@MatthewAbbott - Todo se genera a través de un andamio. Pude resolver el problema implementando la respuesta de Nathan. – quakkels

Respuesta

11

es porque hay una carpeta física llamada contenido. tener un controlador con el mismo nombre que una carpeta física probablemente tendrá algunos efectos adversos en su sitio web.

+0

Huh ... esto tiene sentido. Voy a tratar de cambiar el nombre del controlador. – quakkels

+0

Gracias ... tan simple. – quakkels

+0

Acabo de toparme con esto después de golpear mi cabeza contra la pared para abit, ¡gracias por la respuesta! – Wil

0

Trate de añadir lo siguiente a sus definiciones de ruta:

routes.RouteExistingFiles = true; 
+0

¿no tendrá entonces que configurar rutas o ignorar rutas para sus archivos de contenido reales? –

+0

Creo que esto funcionaría. Pero, creo que el problema raíz está delineado por @nathangonzalez. – quakkels

Cuestiones relacionadas