[INFO] ASP.NET の HTTP モジュールと HTTP ハンドラの概要

概要

この資料では、ASP.NET の HTTP モジュールと HTTP ハンドラの概要を紹介します。


ASP.NET の概要に関するその他の情報については、次の「サポート技術情報」 (Microsoft Knowledge Base) の資料を参照してください。
305140
ASP.NET ロードマップ

詳細

HTTP のモジュールと HTTP ハンドラは、ASP.NET アーキテクチャに不可欠な部分です。要求が処理される時には、それぞれの要求が複数の HTTP モジュール (たとえば、認証モジュールやセッション モジュール) で処理され、その後、単一の HTTP ハンドラによって処理されます。ハンドラが要求を処理すると、その要求は HTTP モジュールを通って、経路を逆に戻ります。


この資料では、以下の内容について説明します。

HTTP モジュール

モジュールは、ハンドラが実行される前後に呼び出されます。モジュールを使用すると、開発者は各要求を途中で捕捉したり、その要求に参加したり、または要求を変更したりすることができます。モジュールは、System.Web 名前空間の中にある IHttpModule インターフェイスを実装しています。


利用可能なイベント

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 name="[ModuleName]" />
<clear />
</httpModules>

HTTP モジュールの作成

HTTP モジュールを作成するには、IHttpModule インターフェイスを実装する必要があります。IHttpModule インターフェイスには、次のシグニチャを持つ 2 つのメソッドがあります。
void Init(HttpApplication);
void Dispose();
HTTP モジュール作成の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
308000
[HOW TO] Visual Basic .NET を使用して ASP.NET HTTP モジュールを作成する方法
307996
[HOW TO] Visual C# .NET を使用して ASP.NET HTTP モジュールを作成する方法

HTTP ハンドラ

ハンドラは、個々のエンドポイントの要求を処理するために使用されます。ハンドラを使用することで、ASP.NET フレームワークは個々の HTTP URL や URL 拡張子のグループをアプリケーション内で処理できます。モジュールとは異なり、要求を処理するために使用されるハンドラは 1 つだけです。すべてのハンドラは、IHttpHandler インターフェイスを実装します。このインターフェイスは System.Web 名前空間にあります。ハンドラは、ISAPI (Internet Server Application Programming Interface) 拡張と、ある意味で似ています。


HTTP ハンドラの構成

<httpHandlers> 構成セクションのハンドラは、受け取った URL を IHttpHandler クラスや IHttpHandlerFactory クラスにマッピングする役割を持っています。これは、コンピュータ、サイト、またはアプリケーション レベルで宣言できます。サブディレクトリでは、これらの設定が継承されます。


管理者は、<add> タグ ディレクティブを使用して、<httpHandlers> セクションを構成できます。<add> ディレクティブは、上から下の順序で解釈および処理されます。<httpHandlers> セクションのハンドラには、次の構文を使用します。
<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 インターフェイスも実装する必要があります。
HTTP ハンドラ作成の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
308001
[HOW TO] Visual C# .NET を使用して ASP.NET HTTP ハンドラを作成する方法
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
307997
[HOW TO] Visual Basic .NET を使用して ASP.NET HTTP ハンドラを作成する方法
プロパティ

文書番号:307985 - 最終更新日: 2008/07/14 - リビジョン: 1

フィードバック