2

コントローラーから JavaScript を生成するために mvc ルートを追加しようとしています。次のルートを追加しましたが、機能しません。

routes.MapRouteWithName(
           "DataSourceJS", // Route name
           "Scripts/Entities/{controller}/datasource.js", // URL with parameters
           new { controller = "Home", action = "DataSourceJS"} // Parameter defaults,
           , null
           );

しかし、「.js」を持たないようにルートを変更し、「Scripts/Entities/{controller}/datasource」に移動すると機能します。しかし、そこに .js ファイル拡張子を付ける必要があります。これを機能させるにはどうすればよいですか?

4

1 に答える 1

6

どうすればこれを機能させることができますか?

IISは、ファイル拡張子が含まれているために要求をインターセプトし、静的ファイルであると見なしてアプリケーションに渡さないようにハイジャックします。

それを機能させるには、IISにそうしないように指示する必要があります。セクション内に<system.webServer>次のハンドラーを追加して、指定されたパターンの要求をマネージドパイプラインで処理する必要があることを示すことができます。

<system.webServer>
    <handlers>
        ...
        <add name="ScriptsHandler" path="Scripts/Entities/*/datasource.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

一部の人々はまたあなたに使用するように言うかもしれません:

<modules runAllManagedModulesForAllRequests="true" />

ただし、これを行うことはお勧めしません。これは、静的リソースへのすべてのリクエストがマネージドパイプラインを通過するようになり、アプリケーションのパフォーマンスオーバーヘッドが低下する可能性があるためです。ハンドラ構文を使用すると、特定のルートパターンとHTTP動詞に対してのみこれを選択的に有効にできます。

于 2013-02-07T06:49:49.790 に答える