I'm trying to get the following (and similar) urls to work in my ASP.net MVC4/WebApi project:
http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll
The route responsible for this url looks like this:
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 } );
It works just fine if I remove the . in the file-name, or if I add a slash behind the URL, but that also means I can't use the Url.Route
-methods etc. The error I get is a generic 404-error (image below).
I've tried adding <httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />
to my web.config, and I've also tried adding
<compilation debug="true" targetFramework="4.5"> <buildProviders> <remove extension=".dll"/> <remove extension=".exe"/> </buildProviders> </compilation>
And none of it seems to work. So my question is basically, how can I get this URL to work, and map correctly?
You could add the following handler to the <handlers>
section of your <system.webServer>
:
<add name="ManagedDllExtension" path="api/nav/*/*.dll" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
This will make all requests containing .dll
be served through the managed pipeline. Also notice how I have limited them only to the GET verb to limit the performance impact.
Found it. What's needed is this (and maybe some of the things I've added above in the original post):
<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With