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

文書翻訳 文書翻訳
文書番号: 307985 - 対象製品
この記事は、以前は次の ID で公開されていました: JP307985
すべて展開する | すべて折りたたむ

目次

概要

この資料では、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 - 最終更新日: 2005年12月1日 - リビジョン: 3.2
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
キーワード:?
kbarttyperoadmap kbhttphandlers kbhttpmodule kbhttpruntime kbinfo KB307985
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com