9

私たちのショップは、 system.webServer\handlersの下の web.config で定義されたカスタムおよびサードパーティの HTTP ハンドラーを利用する大規模な Web アプリケーションに ASP.NET MVC を統合しています。このように HTTP ハンドラーを活用することは、私たちにとって非常に便利です。アプリケーションを再コンパイルしたり、実際のハンドラー ページを製品の各インスタンスの Web スコープ内のどこかにディスク上に置いたりする必要がないからです。

ランタイムが web.config で定義されたハンドラーを尊重できるように、global.asax に明示的な Ignore Routes を追加することが本当に必要ですか? system.webServer\handlers で定義されたハンドラーがチェックされたにWeb.Routing が呼び出されると思っていました (その逆ではありません)。

機能が追加されたときに web.config からハンドラーを追加/削除できるモジュール設計を使用します。MVC ルーティングの導入により、web.config で定義されている可能性のあるすべてのハンドラーについて、global.asax ファイルに無視ルートを追加する必要があるようです。

これらのハンドラへの実際のファイルはディスク上に存在しないことに注意してください。それらは仮想であり、アセンブリに埋め込まれています。global.asax で明示的な Ignore Route を必要とするサード パーティ ハンドラーの例を次に示します。

<system.webServer>
    <handlers>
          <!-- telerik radcontrols -->
          <add name="TelerikDialogHandler" verb="*" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler, Telerik.Web.UI, Version=2009.1.402.20, Culture=neutral, PublicKeyToken=121fae78165ba3d4"></add>
    </handlers>
</system.webServer>

したがって、System.Web.Routing を使用する場合は、記録のために、Web.Config で指定された Http ハンドラーの無視ルートを含める必要がありますか? それとも、私は何か間違ったことをしていますか?

4

1 に答える 1

2

ASP.NET 要求処理は、ASP.NET が http 要求をパイプライン内のすべてのモジュールに渡すパイプライン モデルに基づいています。各モジュールは http リクエストを受け取り、それを完全に制御します。要求がすべての HTTP モジュールを通過すると、最終的に HTTP ハンドラーによって処理されます。HTTP ハンドラーはそれに対して何らかの処理を実行し、結果はパイプラインの HTTP モジュールを再度通過します。

HttpModuleはイベント発生時にリクエストオブジェクトに何かを足したり引いたりするフィルターで、HttpHandlerは実際にリクエストを処理するプロセッサーだと考えるのが一番良いと思います。ASP.NET 要求のライフサイクルは、処理が行われる前に最初にすべてのフィルターが要求に適用されるようにセットアップされます。

于 2011-01-17T00:35:28.490 に答える