ASP.NET HTTP モジュールと HTTP ハンドラー
この記事では、ハイパーテキスト転送プロトコル (HTTP) モジュールと HTTP ハンドラー ASP.NET について説明します。
元の製品バージョン: ASP.NET
元の KB 番号: 307985
概要
HTTP モジュールと HTTP ハンドラーは、ASP.NET アーキテクチャの不可欠な部分です。 要求が処理されている間、各要求は複数の HTTP モジュール (認証モジュールやセッション モジュールなど) によって処理され、1 つの HTTP ハンドラーによって処理されます。 ハンドラーが要求を処理すると、要求は HTTP モジュールを介してフローバックされます。
HTTP モジュールの概要
モジュールは、ハンドラーの実行前と実行後に呼び出されます。 モジュールを使用すると、開発者は個々の要求をインターセプト、参加、または変更できます。 モジュールは、名前空間にある IHttpModule
インターフェイスを System.Web
実装します。
HTTP モジュールが同期できる使用可能なイベント
クラスは HttpApplication
、モジュールが同期できる多数のイベントを提供します。 各要求で同期するモジュールでは、次のイベントを使用できます。 これらのイベントは、順番に一覧表示されます。
BeginRequest
: 要求が開始されました。 要求の開始時に何かを行う必要がある場合 (たとえば、各ページの上部に広告バナーを表示する)、このイベントを同期します。AuthenticateRequest
: 独自のカスタム認証スキームをプラグインする場合 (たとえば、データベースに対してユーザーを検索してパスワードを検証する)、このイベントを同期してユーザーの認証方法を認証するモジュールを構築します。AuthorizeRequest
: このイベントは、承認メカニズムを実装するために内部的に使用されます (たとえば、アクセス制御リスト (ACL) をファイル システムではなくデータベースに格納する場合など)。 このイベントをオーバーライドすることはできますが、そうする理由はあまりありません。ResolveRequestCache
: このイベントは、出力キャッシュからページを提供できるかどうかを決定します。 独自のキャッシュ モジュールを記述する場合 (たとえば、メモリ キャッシュではなくファイル ベースのキャッシュを構築する) 場合は、このイベントを同期して、キャッシュからページを処理するかどうかを判断します。AcquireRequestState
: セッション状態は状態ストアから取得されます。 独自の状態管理モジュールを構築する場合は、このイベントを同期して、状態ストアからセッション状態を取得します。PreRequestHandlerExecute
: このイベントは、HTTP ハンドラーが実行される前に発生します。PostRequestHandlerExecute
: このイベントは、HTTP ハンドラーが実行された後に発生します。ReleaseRequestState
: セッション状態は状態ストアに保存されます。 カスタム セッション状態モジュールを構築する場合は、状態を状態ストアに格納し直す必要があります。UpdateRequestCache
: このイベントは、出力キャッシュに出力を書き戻します。 カスタム キャッシュ モジュールをビルドする場合は、出力をキャッシュに書き戻します。EndRequest
: 要求が完了しました。 要求全体で情報を収集し、その情報をページに書き込むデバッグ モジュールを構築することもできます。
次のイベントは、各要求転送で同期するモジュールで使用できます。 これらのイベントの順序は決定論的ではありません。
PreSendRequestHeaders
: このイベントは、ヘッダーが送信される前に発生します。 ヘッダーを追加する場合は、カスタム モジュールからこのイベントを同期できます。PreSendRequestContent
: このイベントは、 メソッドがResponse.Flush
呼び出されたときに発生します。 追加のコンテンツを追加する場合は、カスタム モジュールからこのイベントを同期できます。Error
: このイベントは、未処理の例外が発生したときに発生します。 カスタム エラー ハンドラー モジュールを記述する場合は、このイベントを同期します。
HTTP モジュールを構成する
<httpModules>
構成セクション ハンドラーは、アプリケーション内で HTTP モジュールを構成する役割を担います。 これは、コンピューター、サイト、またはアプリケーション レベルで宣言できます。 セクション ハンドラーには、次の構文を <httpModules>
使用します。
<httpModules>
<add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<clear />
</httpModules>
HTTP モジュールを作成する
HTTP モジュールを作成するには、 インターフェイスを実装する IHttpModule
必要があります。
IHttpModule
インターフェイスには、次のシグネチャを持つ 2 つのメソッドがあります。
void Init(HttpApplication);
void Dispose();
HTTP ハンドラーの概要
ハンドラーは、個々のエンドポイント要求を処理するために使用されます。 ハンドラーを使用すると、ASP.NET フレームワークは、アプリケーション内の個々の HTTP URL または URL 拡張機能のグループを処理できます。 モジュールとは異なり、要求の処理に使用されるハンドラーは 1 つだけです。 すべてのハンドラーは、 内にある IHttpHandler
インターフェイスを System.Web namespace
実装します。 ハンドラーは、インターネット サーバー アプリケーション プログラミング インターフェイス (ISAPI) 拡張機能に似ています。
HTTP ハンドラーを構成する
<httpHandlers>
構成セクション ハンドラーは、受信 URL を または IHttpHandlerFactory
クラスにマッピングする役割をIHttpHandler
担います。 これは、コンピューター、サイト、またはアプリケーション レベルで宣言できます。 サブディレクトリは、これらの設定を継承します。
管理者は、タグ ディレクティブを <add>
使用してセクションを <httpHandlers>
構成します。
<Add>
ディレクティブは、トップダウン順に解釈および処理されます。 セクション ハンドラーには、次の構文を <httpHandler>
使用します。
<httpHandlers>
<add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
<remove verb="[verb list]" path="[path/wildcard]" />
<clear />
</httpHandlers>
HTTP ハンドラーを作成する
HTTP ハンドラーを作成するには、 インターフェイスを実装する IHttpHandler
必要があります。 インターフェイスには IHttpHandler
、次のシグネチャを持つ 1 つのメソッドと 1 つのプロパティがあります。
void ProcessRequest(HttpContext);
bool IsReusable {get;}
注:
HTTP ハンドラーでセッション状態が必要な場合は、インターフェイスも実装 IRequiresSessionState
する必要があります。