2

Authenticate イベントを介して FormsAuthentication モジュールにフックする http モジュールを開発しています。

デバッグ中に、モジュール (および登録されている他のすべてのモジュール) が、クライアントがリソースを要求するたびに (画像、スタイルシート、javascript ファイルなどを要求するときも) ヒットすることに気付きました。これは、IIS 7 サーバー上で統合パイプライン モードで実行している場合と、webdev サーバーを介してデバッグしている場合 (非統合パイプライン モード) の両方で発生します。

クライアントブラウザによって通常はキャッシュされない多くの画像を含むWebサイトを開発しているため、不要な回数がモジュールにヒットします。

MVC とそのルーティング メカニズム (System.Web.Routing.UrlRoutingModule) を使用しています。新しい Web サイトを作成するとき、IIS 7 (system.webServer) セクションの runAllManagedModulesForAllRequests 属性は、web.config でデフォルトで true に設定されます。これは、名前が示すように、単一の要求ごとにすべてのモジュールを呼び出すようにします。

runAllManagedModulesForAllRequests 属性を false に設定すると、モジュールは呼び出されません。

この理由は、ルーティング モジュールまたは mvc が原因であると思われ (正確な理由はわかりません)、asp.net (aspx) ハンドラーが呼び出されないため、イベントとモジュールが呼び出されません (1 回のみ)。想定のように)。

「mydomain.com/」だけでなく「mydomain.com/Default.aspx」を呼び出そうとすることでこれをテストしましたが、想定どおりにモジュールを1回だけ正しく呼び出します。

ページが要求されたときにモジュールを 1 回だけ呼び出し、他のすべてのリソースが要求されたときにモジュールを呼び出さないようにするにはどうすればよいですか?

特定のファイルタイプ拡張子の要求を除いて、すべての要求が asp.net (aspx) ハンドラーを起動するように登録する方法はありますか? もちろん、画像に /content/images/myimage123 のような URL (拡張子なし) を使用することを選択した場合、問題は解決しません。しかし、それを修正する他の方法は考えられません。

この問題を解決するより良い方法はありますか?

この routes.IgnoreRoute("content/{*pathInfo}"); のような ignoreRoute を設定しようとしました。コンテンツフォルダーには、すべての画像、javascript、およびスタイルシートが別々のサブフォルダーに含まれていますが、何も変更されていないようです。

ハンドラーをセットアップするときにさまざまな可能性があることがわかりますが、ルーティングモジュールを使用して /blog/post123 のような URL を持ち、画像、javascript、スタイルシート (など) を要求するときのモジュール。

誰かが私を助けてくれることを願っていますか?

マーティン

4

2 に答える 2

0

問題はルーティング モジュールのようです。

解決策は、画像、css、js をサブドメインに移動することです。または、ルーティング モジュールが無視する必要があるファイルの種類/拡張子を登録することもできます。

于 2010-04-04T02:51:05.967 に答える