route query net mvc example attribute asp asp.net asp.net-mvc asp.net-web-api asp.net-mvc-routing

asp.net - query - web api route example



Ruta ASP.NET MVC4 WebApi con nombre de archivo en ella (3)

Lo encontré. Lo que se necesita es esto (y tal vez algunas de las cosas que he agregado arriba en la publicación original):

<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer>

Estoy intentando obtener las siguientes URL (y similares) para trabajar en mi proyecto ASP.net MVC4 / WebApi:

http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll

La ruta responsable de esta url se ve así:

config.Routes.MapHttpRoute( name: "Nav", routeTemplate: "api/nav/{project}/{assembly}/{namespace}/{type}/{member}", defaults: new { controller = "Nav", assembly = RouteParameter.Optional, @namespace = RouteParameter.Optional, type = RouteParameter.Optional, member = RouteParameter.Optional } );

Funciona bien si elimino el. en el nombre de archivo, o si agrego una barra detrás de la URL, pero eso también significa que no puedo usar los métodos Url.Route etc. El error que obtengo es un error 404 genérico (imagen a continuación).

Intenté agregar <httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" /> a mi web.config, y también intenté agregar

<compilation debug="true" targetFramework="4.5"> <buildProviders> <remove extension=".dll"/> <remove extension=".exe"/> </buildProviders> </compilation>

Y nada de eso parece funcionar. Entonces, mi pregunta es, básicamente, ¿cómo puedo hacer que funcione esta URL y mapear correctamente?


Mi compromiso era agregar /end al final de la ruta. . se ignoran antes del último / .

La URL equivalente sería http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll/end .

El beneficio es que no obtiene un golpe de rendimiento en sus activos.


Puede agregar el siguiente controlador a la sección <handlers> de su <system.webServer> :

<add name="ManagedDllExtension" path="api/nav/*/*.dll" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Esto hará que todas las solicitudes que contengan .dll se sirvan a través de la canalización administrada. También observe cómo los he limitado al verbo GET para limitar el impacto en el rendimiento.