HTTPハンドラーとHTTPモジュール


144

誰かが両方の違いを2文未満で説明できますか?はい、私はグーグルが何百もの答えを提供できることを知っていますが、2つの明確な文章に1つはありません:)


すべてのリクエストの前にいくつかのコードを実行することを検討している状況で。
フレンチ

23
「ええ、私はそれをググることができることを知っています」の+1。
Csharp 2013年

7
「2文未満。」一文?
Andrew Theken

回答:


316

HttpHandlerは、リクエストトレインが向かう場所です。HttpModuleは、途中のステーションです。


素晴らしい説明!:)
SOユーザー

3
これは良い答えですが、受け入れられた回答としてマークすることはできません。
Shrivallabh 2015年

単に素晴らしい!! :)
De

4
技術的には、「2文未満」ではありません。<trollface>
Andrew Theken

5
いいね。HttpContextがトレインであることを追加します。すべてのステーション(モジュール)は、通過するときに何らかの方法でHttpContextに貢献します。
Duanne

203

2つの文:

HttpModuleは、拡張機能に関係なく、アプリケーションへのすべてのリクエストに対して実行され、通常、セキュリティ、統計、ロギングなどに使用されます。

HttpHandlerは通常、特定の拡張子に関連付けられており、RSSフィード、動的な画像の生成や変更などに使用されます。

それが完全に明確でない場合のもう少しの説明:

ハンドラーが特定のファイル拡張子を「処理」するのに対して、モジュールは要求パイプラインに「プラグイン」します。したがって、LoggingModuleとPdfHandlerを含むサイトがある場合、両方がhttp://example.com/sample.pdfへのリクエストに対して実行され、loggingモジュールのみがhttp://へのリクエストに対して実行されます。 example.com/page.aspx

MSDNの違いに関するかなり明確な記事がありますHTTPハンドラーとHTTPモジュールの概要


1
わかりました。.aspxファイルへのすべての要求で実行されるコードを実行する場合はハンドラーを実装し、要求されるファイルの種類に関係なくすべての要求でコードを実行する場合はモジュールを実装します。それですか?
フレンチ

5
@frenchie-いいえ。aspxページは、ページライフサイクルを提供することにより、HttpHandlerの上に構築されます。それをaspxページと考え、非常に基本的なイベントに切り詰めます。ProcessRequest。一方、モジュールは、それを配線するライフサイクルの任意の時点で実行されます。aspxページの前に何かを実行したいというシナリオでは、モジュールが必要です。ただし、.aspx以外のページへのリクエストは手動で除外する必要があります
Phill

6
すべてのリクエストは1つのハンドラーと複数のモジュールのみを持つことができると言って私は正しいですか?
Maarten Kieft 2013年

1
ハンドラの一般的な答えは=状態であり、モジュールは未記述の標準ではありませんか、または2つとは根本的に異なるものがあります、つまり、人がハンドラのようにモジュールをコーディングしたり、その逆の可能性がありますそれを不可能にするそれら?
リッチビアンコ2016

21

HttpHandlerとHttpModuleの主な共通の目標は、ASP.NET要求がIISサーバーに到達する前に前処理ロジックを注入することです。

ASP.NETは、リクエストパイプラインにロジックを挿入する2つの方法を提供します。

  1. Httpハンドラー:Httpハンドラーは、要求されたファイル名の拡張子に基づいて前処理ロジックを挿入するのに役立ちます。ASP.NETは、独自の機能の多くを実装するためにHTTPハンドラーを使用します。たとえば、ASP.NETは、.aspx、.asmx、およびtrace.axdファイルの処理にハンドラーを使用します。

例:RSSフィード:WebサイトのRSSフィードを作成するには、RSS形式のXMLを送信するハンドラーを作成できます。したがって、ユーザーが.rssで終わる要求をサイトに送信すると、ASP.NETはハンドラーを呼び出して要求を処理します。

ハンドラー1の作成には3つのステップがあります。IHttpHandlerインターフェイスを実装します。2. web.configまたはmachine.configファイルにハンドラーを登録します。3.ファイル拡張子(* .arshad)をIISのaspnet_isapi.dllにマップします。

IHttpHandlerインターフェイスには、ProcessRequestメソッドと、実装する必要があるIsReusableプロパティがあります。ProcessRequest:このメソッドでは、ハンドラーの出力を生成するコードを記述します。IsResuable:このプロパティは、このハンドラを再利用できるかどうかを示します。

このようにweb.configファイルにハンドラーを登録できます

<httpHandlers>
   <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
</httpHandlers>

注:ここでは、arshadという拡張子のファイル名を処理しています。

  1. Httpモジュール:HttpModuleは、リクエストがIISサーバーに到達する前に前処理ロジックを挿入するイベントベースのプロセッサです。ASP.NETは、HTTPモジュールを使用して、認証と承認、セッション管理、出力キャッシュなど、独自の機能の多くを実装しています。

ASP.NETエンジンは、要求が要求パイプラインを通過するときに多くのイベントを発行します。それらのイベントのいくつかは、AuthenticateRequest、AuthorizeRequest、BeginRequest、EndRequestです。HttpModuleを使用すると、これらのイベントでロジックを記述できます。これらのロジックは、イベントが発生し、リクエストがIISに到達する前に実行されます。

モジュールの作成には2つの手順があります。1。IHttpModuleインターフェイスを実装します。2。web.configまたはmachine.configファイルにモジュールを登録します。

例:セキュリティ:HTTPモジュールを使用すると、リクエストがIISに到達する前に、カスタム認証やその他のセキュリティチェックを実行できます。


19

HTTPハンドラーは、ASP.NET Webアプリケーションに対して行われた要求に応答して実行されるプロセスです。HTTPモジュールを使用すると、着信要求と発信要求を調べ、その要求に基づいてアクションを実行できます。


1
その意味で、aspxはhttphandlerの一種と考えることができますか?
フレンチ

17
はい、Frenchie..aspxの背後にあるコードを開きます。あなたが表示されます。パブリック部分クラスが良い:System.Web.UI.Pageは今すぐ右ページをクリックし、定義へ移動をクリックし、次のように表示されます:パブリッククラスページ:TemplateControl、IHTTPハンドラ
アーディティヤBokade

5

HttpHandlerは、HttpModuleがアプリケーションのライフサイクルイベントに応答している間、拡張機能によってHTTPリクエストを処理します。


2

HttpModule-and-HttpHandlersについての素晴らしい記事

リファレンス:INFO:ASP.NET HTTPモジュールとHTTPハンドラーの概要

「モジュールは、ハンドラーの実行前と実行後に呼び出されます。モジュールを使用すると、開発者は個々のリクエストを傍受、参加、または変更できます。ハンドラーは、個々のエンドポイント要求を処理するために使用されます。ハンドラーを使用すると、ASP.NET Frameworkは、アプリケーション内の個々のHTTP URLまたはURL拡張のグループを処理できます。モジュールとは異なり、1つのハンドラーのみが要求の処理に使用されます。」


ありがとう、それは私に大いに役立ちます
Rahul Chowdhury

1

HTTPハンドラは、実際に設定に基づいてコンパイルが行われる場所です。たとえば、ページ拡張子が.aspxの場合、system.web.Ui.Pagahandlefactoryを介してコンパイルされます。HTTPハンドルでコンパイルが完了すると、リクエストはHTTPモジュールとIISを通過します。


0

HTTPハンドラー

HTTPハンドラーは、HTTP要求に応答して実行されるプロセスです。したがって、ユーザーがファイルを要求するたびに、拡張子に基づいてハンドラーによって処理されます。そのため、ファイル名拡張子に基づいて特別な処理が必要な場合は、カスタムhttpハンドラーが作成されます。サイトのRSSを作成する例を考えてみましょう。そのため、RSS形式のXMLを生成するハンドラーを作成します。次に、.rss拡張子をカスタムハンドラーにバインドします。

HTTPモジュール

HTTPモジュールはリクエストのライフサイクルにプラグインされます。したがって、リクエストが処理されると、リクエストのパイプライン内のすべてのモジュールに渡されます。したがって、一般的にhttpモジュールは次の目的で使用されます。

セキュリティ:リクエストが処理される前にリクエストを認証します。

統計とロギング:モジュールはリクエストごとに呼び出されるので、統計の収集と情報のロギングに使用できます。

カスタムヘッダー:レスポンスを変更できるため、カスタムヘッダー情報をレスポンスに追加できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.