Asp.net

帶有文件名的 ASP.net MVC4 WebApi 路由

  • February 2, 2013

我正在嘗試讓以下(和類似的)網址在我的 ASP.net MVC4/WebApi 項目中工作:

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

負責此 url 的路由如下所示:

       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-methods 等。我得到的錯誤是一個通用的 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>

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

這將使包含的所有請求都.dll通過託管管道提供服務。另請注意,我如何將它們限制為 GET 動詞以限制性能影響。

引用自:https://stackoverflow.com/questions/14664488