web-dev-qa-db-ja.com

IISがASP.NETパイプラインを介して静的ファイルを提供しないようにする

私のcss、js、画像ファイルのリクエストは、ASP.NETパイプラインを介して提供されています。 IISはデフォルトでこれを回避していると思いましたが、Application_AuthenticateRequestブレークポイントにリクエストが表示され、実際にそれらのリクエストを認証する必要はありません。この動作を変更するための競合するアプローチを見てきました。 -これを行うための最良の方法は何ですか?

30
kenwarner

ここで推測しているのですが、web.configファイルに次の設定が構成されていると思われます。

<modules runAllManagedModulesForAllRequests="true">

これは、静的コンテンツのリクエストを含むすべてのリクエストがパイプラインにヒットしていることを意味します。

この設定を次のように変更します。

<modules runAllManagedModulesForAllRequests="false">

これは、アプリケーションがASP.NET4.0およびMVC3で実行されていることを前提としています。

これを機能させるには、 KB980368 (再起動が必要)またはWindows 2008R2 SP1(この修正プログラムを含む)をインストールする必要があります。この理由は、この優れた記事で説明されています。

ASP.NET MVCルーティングのしくみと静的リクエストのパフォーマンスへの影響

35
Kev

これをweb.configに追加することになりました。すべての静的ファイルがこれらのフォルダーに存在することはわかっているので、必要に応じて問題なく動作します。

<location path="scripts">
    <system.web>
        <authentication mode="None" />
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
<location path="styles">
    <system.web>
        <authentication mode="None" />
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
<location path="images">
    <system.web>
        <authentication mode="None" />
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
12
kenwarner

Visual Studio DevelopmentServerが有効になっているVS2012/MVC3では、RAMMFAR = falseは効果がありません。静的ファイルに対する各要求は、引き続きApplication_BeginRequestイベントハンドラーにヒットします。

IIS Expressに切り替えて、目的の機能を確認しました。

1
LSU.Net

IIS構成またはweb.configのいずれかのどこかに、これらのファイルをASP.Netアプリケーションにマップするように設定されたハンドラーマッピングがあります。

Web.configを削除して、ASP.NetがなくてもIIS内からこれらのファイルタイプを参照できるかどうかを確認してください。失敗した場合は、web.configであることがわかります。それ以外の場合はIIS設定を確認する必要があります。

ステップ2-web.configsを元に戻し、サイトを削除して再作成します-同じ問題ですか?これは、IISのルートにある設定です。つまり、すべてのサイトに適用されます。ここでハンドラーのマッピングを確認してください。

0
BonyT