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.