36

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の後ろにスラッシュを追加した場合、これは-methodsなどを使用できないことも意味します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を機能させ、正しくマップするにはどうすればよいですか?

4

3 に答える 3

52

次のハンドラーを<handlers>セクションに追加できます<system.webServer>

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

これにより、を含むすべてのリクエストが.dll管理対象パイプラインを介して処理されます。また、パフォーマンスへの影響を制限するために、それらをGET動詞のみに制限したことに注意してください。

于 2013-02-02T17:52:27.947 に答える
13

それを見つけた。必要なのはこれです(そしておそらく私が元の投稿で上に追加したもののいくつか):

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
于 2013-02-02T17:47:23.107 に答える
4

私のトレードオフは/end、ルートの最後に追加することでした。.最後のの前のは無視され/ます。

同等のURLはhttp://127.0.0.1:81/api/nav/SpotiFire/SpotiFire.dll/endになります。

利点は、アセットのパフォーマンスが低下しないことです。

于 2016-09-27T11:27:30.527 に答える