9

私たちはASP.NET MVCを、system.webServer \ handlersのweb.configに定義されているカスタム&サードパーティHTTPハンドラを使用する大規模なWebアプリケーションに統合しています。このような方法でHTTPハンドラを利用することは、アプリケーションの再コンパイルや、実際のハンドラページを製品の各インスタンスのWebスコープのどこかにディスク上に置く必要がないため、とても役に立ちました。ASP.NETルーティングがweb.configのHttp Handlersセクションよりも優先されるのはなぜですか?

私たちのglobal.asaxに明示的にIgnore Routesを追加する必要があるので、ランタイムはweb.configで定義されたハンドラを尊重することができますか?の後にWeb.Routingが呼び出されてと呼び出されたと思っていましたが、system.webServer \ handlersで定義されたハンドラがチェックされています。

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

これらのハンドラへの実際のファイルはディスク上に存在しないことに注意してください。これらは仮想であり、アセンブリに埋め込まれています。

<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> 

ので、記録のために、あなたがウェブで指定したHTTPハンドラのルートを無視する含める必要がありますSystem.Web.Routing使用する場合:ここでは今、Global.asaxの中でルートを無視明示を要求するサードパーティ製のハンドラの例です。 .Config?あるいは私は何か間違っているのでしょうか?

+3

ルーティングはHttpModuleとして実装されているため、HttpHandlerを選択する前に常に処理されます。 –

+1

あなたはそれを回答Ladislavとして投稿しないでください。 –

答えて

2

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

私は、これらのことを考える最も良い方法は、HttpModuleが、イベントが発生したときにリクエストオブジェクトから何かを追加または減算するフィルタであり、HttpHandlerがリクエストを実際に処理するプロセッサだということです。 ASP.NET要求ライフサイクルは、すべてフィルタが最初に要求に適用され、処理が発生するように設定されています。

+0

拡張用のJonasに感謝します。すべての可能なHttpハンドラのマスターリストを、各アプリケーションインスタンスのいくつかのハンドラを使用していないにもかかわらず、その動作を回避するためのルートを無視することにしました。 –

関連する問題