ASP.net MVC4/WebApiプロジェクトで次の(および同様の)URLを機能させようとしています。
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
-メソッドなどを使用できないことも意味します。取得するエラーは一般的な404エラーです(下の画像)。
Web.configに<httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />
を追加しようとしましたが、追加も試みました
<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動詞のみに制限していることに注意してください。
それを見つけた。必要なのはこれです(そしておそらく私が元の投稿で上に追加したもののいくつか):
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
私のトレードオフは、ルートの最後に/end
を追加することでした。 .
は最後の/
の前に無視されます。
同等のURLはhttp://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll/endになります。
利点は、アセットのパフォーマンスに影響を与えないことです。