13

私は MVC4 を使用しており、次のようなリクエストをコントローラーにルーティングする必要があります。

[myapp]/data/fileinfo.xml

設定したルートは次のとおりです。

routes.MapRoute(
            name: "Data",
            url: "Data/{file}",
            defaults: new { controller = "Data", action = "fileinfo"}
        );

現在、これは完全に正常に機能し、URL に .xml 拡張子が含まれていない場合は要求を DataController にルーティングしますが、拡張子が使用されるとすぐに、 IIS は(コントローラーにルーティングする代わりに)静的ファイルを提供しようとします。 404 エラーが発生します。

この問題に関する多くの質問/回答をオンラインで読みましたが、試したすべての解決策が失敗しました。

たとえばRouteExistingFiles = true、RouteCollection を構成するときに使用しようとしまし<modules runAllManagedModulesForAllRequests="true" />たが、web.config に追加しましたが、役に立ちませんでした。

誰かが私が何を試すべきか、または私が見逃している可能性のあるアイデアを持っているなら、それは大歓迎です. asp.Net 4.5、VS 2012、および IIS 8.0 を使用しています。

4

2 に答える 2

11

これを web.config の<system.webServer><handlers>セクションに追加できます。

<add name="ManagedDllExtension" 
     path="data/fileinfo.xml" 
     verb="GET" type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />

あなたのルートは

routes.MapRoute(
        name: "Data",
        url: "Data/fileinfo.xml",
        defaults: new { controller = "Data", action = "fileinfo"}
    );

もありますが<modules runAllManagedModulesForAllRequests="true">、MVC4/IIS8 では動作しないようです (MVC3/IIS7 IIRC では以前は問題ありませんでした)。詳細はこちら。すべてのリクエストが管理されたパイプラインを介してルーティングされるため、これにはパフォーマンスへの影響もあります。

HTH

于 2013-06-03T08:25:27.373 に答える
0

ASP MVC 4 でも同じ問題が発生しました。web.config syste.webserver.handlers セクションで、次のコードを見つけました。

<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

.ext を持つすべての要求は、IIS によって自動的に処理されます。それらは MVC 3 にはありませんでした。

于 2013-09-09T15:13:42.333 に答える