ASP.NETHTTP モジュールと HTTP ハンドラー

この記事では、ハイパー ASP.NET プロトコル (HTTP) モジュールと HTTP ハンドラーについて説明します。

元の製品バージョン:  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 ハンドラーは、Internet Server アプリケーション プログラミング インターフェイス (ISAPI) 拡張機能に類似しています。

HTTP ハンドラーの構成

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

管理者は、タグ ディレクティブ <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 があります。