route net mvc formulario form español data asp all asp.net-mvc iis static asp.net-mvc-routing

asp.net mvc - net - Enrutar una URL con extensión en MVC4 no funcionará, intenta servir el archivo estático



mvc required field validation (2)

Estoy usando MVC4 y necesito enrutar una solicitud como esta a un controlador:

[myapp]/data/fileinfo.xml

Aquí está la ruta que he configurado:

routes.MapRoute( name: "Data", url: "Data/{file}", defaults: new { controller = "Data", action = "fileinfo"} );

Ahora, esto funciona perfectamente bien y dirige las solicitudes a mi DataController si la URL no incluye la extensión .xml, pero tan pronto como se usa una extensión, IIS intenta servir un archivo estático (en lugar de enrutar a mi controlador) y yo obtener un error 404.

He leído muchas preguntas / respuestas sobre este tema en línea, y todas las soluciones que he probado han fallado.

Por ejemplo, intenté usar RouteExistingFiles = true al configurar mi RouteCollection y agregué <modules runAllManagedModulesForAllRequests="true" /> en web.config, pero fue en vano.

Si alguien tiene una idea de lo que debería probar o de lo que me puede estar perdiendo, sería muy apreciado. Estoy usando asp.Net 4.5, VS 2012 e IIS 8.0.


Puede agregar esto a su web.config en la sección <system.webServer><handlers> :

<add name="ManagedDllExtension" path="data/fileinfo.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Tu ruta sería

routes.MapRoute( name: "Data", url: "Data/fileinfo.xml", defaults: new { controller = "Data", action = "fileinfo"} );

También hay <modules runAllManagedModulesForAllRequests="true"> pero no parece funcionar para MVC4 / IIS8 (solía estar bien en MVC3 / IIS7 IIRC). Más información aquí . También hay un impacto en el rendimiento con este ya que cada solicitud se enrutará a través de la canalización administrada.

HTH


Tuve el mismo problema con ASP MVC 4. En la sección web.config syste.webserver.handlers, encontré el siguiente código:

<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%/Microsoft.NET/Framework/v4.0.30319/aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%/Microsoft.NET/Framework64/v4.0.30319/aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

Toda solicitud que tenga .ext será manejada automáticamente por IIS. Esos desaparecidos en MVC 3.