Visual C# .NET を使用して ASP.NET HTTP モジュールを作成する方法


Microsoft Visual Basic .NET については、次の資料を参照してください。308000


重要 : この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
Visual C# の構文

この資料の内容

この資料では、Visual C# .NET を使用して単純なカスタム HTTP モジュールを作成する方法を紹介します。モジュールの作成、配置、および構成方法と共に、Global.asax ファイルでモジュールのイベントをフックする方法についても説明します。


先頭に戻る

詳細


モジュールの実装

  1. MyModule という名前の新しい Visual Studio .NET C# クラス ライブラリ プロジェクトを作成します。
  2. System.Web.dll アセンブリへの参照を設定します。
  3. クラスに以下のディレクティブを追加します。
    using System.Web;
  4. クラスの名前を SyncModule.cs に変更し、クラス定義にも反映します。
  5. IHttpModule インターフェイスを実装します。クラス定義は次のようになります。
    public class SyncModule : IHttpModule
  6. サブスクライブするイベントを決定します。以下のリストは、サブスクライブ可能な HttpApplication オブジェクトからのイベントについて概説したものです。

    • AcquireRequestState : このイベントを呼び出すと、モジュールが要求に関する状態 (セッションなど) を取得または作成できるようになります。
    • AuthenticateRequest : セキュリティ モジュールが要求を処理する前にユーザーを認証する必要がある場合に呼び出します。
    • AuthorizeRequest : 要求を承認する必要がある場合に、セキュリティ モジュールから呼び出します。認証後に呼び出します。
    • BeginRequest : 新しい要求の開始をモジュールに通知するのに呼び出します。
    • Disposed : 何らかの理由でアプリケーションが終了することをモジュールに通知するのに呼び出します。モジュールは、内部的なクリーンアップを実行します。
    • EndRequest : 要求の終了をモジュールに通知するのに呼び出します。
    • Error : 要求の処理中に発生したエラーをモジュールに通知するのに呼び出します。
    • PostRequestHandlerExecute : ハンドラが要求の処理を完了したことをモジュールに通知するのに呼び出します。
    • PreRequestHandlerExecute : 要求のハンドラが呼び出されようとしていることをモジュールに通知するのに呼び出します。
    • PreSendRequestContent : コンテンツがクライアントに送信されようとしていることをモジュールに通知するのに呼び出します。
    • PreSendRequestHeaders : HTTP ヘッダーがクライアントに送信されようとしていることをモジュールに通知するのに呼び出します。
    • ReleaseRequestState : ハンドラが要求の処理を完了したときに呼び出します。これにより、モジュールが状態を解放できるようになります。
    • ResolveRequestCache : 認証後に呼び出します。キャッシュ モジュールは、このイベントを使用して、要求がキャッシュによって処理されるべきか、またはハンドラによって処理されるべきかを判定します。
    • UpdateRequestCache : ハンドラからの応答後に呼び出します。キャッシュ モジュールは、この応答によってキャッシュを更新する必要があります。
    このサンプルでは、BeginRequest イベントを使用します。
  7. 以下のように、IHttpModule インターフェイスの Init および Dispose メソッドを実装します。
    public void Init(HttpApplication app)
    {
    app.BeginRequest += new EventHandler(OnBeginRequest);
    }

    public void Dispose(){ }
  8. 以下のように、イベントに対するデリゲートを作成します。
    public delegate void MyEventHandler(Object s, EventArgs e);
  9. イベントへの参照を保持する MyEventHandler 型のプライベート ローカル変数を定義します。
    private MyEventHandler _eventHandler = null;
  10. Global.asax ファイルまたは HttpApplication オブジェクトから継承したクラスのメソッドにデリゲートをフックするイベントを作成します。
    public event MyEventHandler MyEvent
    {
    add { _eventHandler += value; }
    remove { _eventHandler -= value; }
    }
  11. HttpApplication の BeginRequest イベントにフックする OnBeginRequest メソッドを作成します。
    public void OnBeginRequest(Object s, EventArgs e)
    {
    HttpApplication app = s as HttpApplication;
    app.Context.Response.Write("Hello from OnBeginRequest in custom module.<br>");
    if(_eventHandler!=null)
    _eventHandler(this, null);
    }
  12. プロジェクトをコンパイルします。
先頭に戻る

モジュールの配置

  1. C:\Inetpub\Wwwroot の下に、Module という名前の新しいディレクトリを作成します。
  2. 新しく作成した Module ディレクトリの中に、Bin というサブディレクトリを作成し、C:\Inetpub\Wwwroot\Module\Bin というパスを生成します。
  3. プロジェクトの Bin\Debug ディレクトリから、MyModule.dll を C:\Inetpub\Wwwroot\Module\Bin ディレクトリにコピーします。
  4. 以下の手順に従って、新しい Module ディレクトリを Web アプリケーションとして指定します。
    1. インターネット サービス マネージャを開きます。
    2. Module ディレクトリを右クリックし、[プロパティ] をクリックします。
    3. [ディレクトリ] タブで [作成] をクリックします。
    4. [OK] をクリックして [Module のプロパティ] を閉じます。
先頭に戻る

システムの構成

  1. C:\Inetpub\Wwwroot\Module\ ディレクトリの中に、Web.config という名前の新しいファイルを作成します。
  2. Web.config に以下のテキストを貼り付けます。
    <configuration>
    <system.web>
    <httpModules>
    <add name="MyModule" type="MyModule.SyncModule, MyModule" />
    </httpModules>
    </system.web>
    </configuration>
先頭に戻る

モジュールのテスト

  1. C:\Inetpub\Wwwroot\Module ディレクトリの中に、Test.aspx という名前の新しい .aspx ファイルを作成します。
  2. Test.aspx に以下のテキストを貼り付けます。
    <%@Page Language="C#"%>
    <% Response.Write("Hello from Test.aspx.<br>"); %>
  3. C:\Inetpub\Wwwroot\Module ディレクトリの中に、Global.asax ファイルを作成します。
  4. Global.asax に以下のコードを貼り付けます。
    <%@ Import Namespace="MyModule" %>

    <script language="C#" runat=server >
    protected void MyModule_OnMyEvent(Object src, EventArgs e)
    {
    Context.Response.Write("Hello from MyModule_OnMyEvent called in Global.asax.<br>");
    }
    </script>
  5. Test.aspx ページを要求します。以下のテキストが表示されることを確認してください。
    Hello from OnBeginRequest in custom module.
    Hello from MyModule_OnMyEvent called in Global.asax.
    Hello from Test.aspx.
先頭に戻る

関連情報


HttpHandlers の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

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

先頭に戻る