カスタム IHttpModules を作成しているときに、静的ファイル (.css および .js ファイルなど) の要求がマネージ モジュールにヒットしていることに気付きました。おそらく写真にも同じ問題があります。IIS は、ファイル システムに存在するファイルに対して ASP.NET をバイパスするべきではありませんか?
例えば:
public class MyModule:IHttpModule
{
public void Dispose(){ }
public void Init(HttpApplication context)
{
context.BeginRequest += (o, e) => Debug.Print("Request: " + HttpContext.Current.Request.RawUrl);
}
}
そして、私はそれを次のように宣言します。
<modules runAllManagedModulesForAllRequests="true">
<add name="MyModule" preCondition="managedHandler" type="MVCX.Modules.MyModule, MVCX"/>
</modules>
ただし、前提条件を使用しても、静的ファイルがモジュールをどのように通過するかを確認できます。
Request: /MVCX/
Request: /MVCX/Content/Site.css
Request: /MVCX/Scripts/jquery-1.4.4.min.js
静的ファイルのルールを無視しようとしましたが、違いはありません:
routes.IgnoreRoute("{Content}/{*pathInfo}");
routes.IgnoreRoute("{Scripts}/{*pathInfo}");
これはいつものことですか?それとも、ここで何か不足していますか? 私の知る限り、IIS が静的ファイル要求に応答する必要がある場合。マネージ モジュールがヒットしている場合は、CLR ThreadPool スレッドがその要求を処理していることを意味しますよね?
よろしく。
アップデート:
「runAllManagedModulesForAllRequests」を無効にしました。
<modules runAllManagedModulesForAllRequests="false">
<add name="MyModule" preCondition="managedHandler" type="MVCX.Modules.MyModule, MVCX" />
</modules>
そして、すべてがうまく機能しているようですが、次の記事を見つけました: http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html "UrlRoutingModule-4.0 "空の前提条件を持つモジュール。
私のマシンでは、そのモジュールの追加はルート web.config にあり、すでに空の preCondition があります。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>type machine.config | find "UrlRouting"
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>type web.config | find "UrlRouting"
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config>
だから今、私は少し混乱しています.このパラメータのステータスは何ですか? 私はそれを使うべきですか、それともすべきではありませんか?デフォルトで「true」になるのはなぜですか?
よろしく。