2012-05-30 9 views
8

Tengo problemas con las rutas que no coinciden cuando contienen ciertas extensiones de archivos en ellas. Sospecho que podría ser un problema de IIS, pero parece que no puedo rastrearlo.Asp.net MVC El enrutamiento no coincide con algunas extensiones de archivos

En primer lugar, tengo RouteExistingFiles desactivado:

routes.RouteExistingFiles = false; 

Y luego tengo la siguiente ruta:

routes.MapRoute("", "category/{category}.aspx", new { controller = "Category", action = "View" }); 

y la siguiente URL no coincide con esta ruta:

http://mysite/category/test.aspx 

Pero, si elimino la extensión del archivo y cangeo la ruta a:

routes.MapRoute("", "category/{category}", new { controller = "Category", action = "View" }); 

A continuación, la URL anterior coincide con la categoría {} se ajusta a "test.aspx"

también tengo el mismo problema con esta ruta:

routes.MapRoute("sitemap", "sitemap.xml", new { controller = "Resource", action = "Sitemap" }); 

Lo extraño es que yo no estoy teniendo este problema con todas las rutas con extensiones de archivos. Las siguientes rutas parecen estar funcionando bien para mí:

routes.MapRoute("", "favicon.ico", new { controller = "Resource", action = "Favicon" }); 
routes.MapRoute("", "min.css", new { controller = "Resource", action = "Css" }); 
routes.MapRoute("", "min.js", new { controller = "Resource", action = "JavaScript" }); 
routes.MapRoute("", "rsd.xml", new { controller = "MetaWeblog", action = "Rsd" }); 

¿Hay algo que debería estar al tanto de las extensiones .aspx y .xml? ¿Podría ser esto un problema de IIS? ¿Hay una mejor manera de depurar esto que simplemente usando RouteDebugger?

+0

Las rutas aspx que ha creado están trabajando en mi caja con la aplicación funcionando en IIS 7 – VJAI

+0

Tengo un problema similar y se preguntaba si tienes una buena solución? – DDiVita

Respuesta

1

¿Su problema es que la solicitud no se dirige a esas acciones si la url contiene .xml o .aspx?

entonces creo que esto debe ser cierto,

routes.RouteExistingFiles = true; 

ACTUALIZACIÓN:

he probado en dos escenarios con la siguiente ruta para un sitio que ejecuta en IIS 7.

routes.MapRoute("sitemap", "{sitemap}.xml", 
        new { controller = "Resource", action = "Sitemap" }); 

Con RouteExistingFiles es falso,

En este caso, cuando el archivo sitemap.xml está allí, la solicitud se dirige a ese archivo, de lo contrario, la solicitud se dirige a la acción.

Con RouteExistingFiles es cierto,

Cuando existe el archivo sitemap.xml o no todo el tiempo la solicitud se dirige a la acción.

+2

Los archivos que coinciden en las URL no existen en el disco por lo que no califican como archivos existentes. Quiero que estas rutas se dirijan a las acciones del controlador, no sirvan los archivos estáticos. –

0

Acabo de toparme con este problema. Para mí, el enrutamiento no se ha invocado para los archivos que no tienen controladores administrados. La siguiente configuración trabajado para mí:

<system.webServer> 
    <modules> 
    <remove name="UrlRoutingModule-4.0" /> 
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
    </modules> 
</system.webServer> 
Cuestiones relacionadas