ASP.NET MVC4 WebApi路由中包含文件名

前端之家收集整理的这篇文章主要介绍了ASP.NET MVC4 WebApi路由中包含文件名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试获取以下(和类似的)URL在我的ASP.net MVC4 / WebApi项目中工作:
http://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll

负责此网址的路由如下所示:

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 }
        );

它工作得很好,如果我删除。在文件名中,或者如果我在URL之后添加斜杠,但这也意味着我无法使用Url.Route方法等。我得到的错误是一个通用的404错误(下面的图片)。

我尝试添加< httpRuntime targetFramework =“4.5”relaxedUrlToFileSystemMapping =“true”/>到我的web.config,我也试过添加

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

而且似乎没有一个工作。所以我的问题基本上是如何让这个URL工作,并正确地映射?

解决方法

您可以将以下处理程序添加到< handlers>您的< system.webServer&gt ;:部分
<add 
    name="ManagedDllExtension" 
    path="api/nav/*/*.dll" 
    verb="GET" 
    type="System.Web.Handlers.TransferRequestHandler" 
    preCondition="integratedMode,runtimeVersionv4.0" 
/>

这将使所有包含.dll的请求都通过托管管道提供。还要注意,我如何限制它们仅限于GET动词以限制性能影响。

猜你在找的asp.Net相关文章