HTTP モジュールの作成

Programming
公開: 2025-03-13

概要

  • .NET Framework 4.x 系を使用する(.NET Core は不可)
  • クラスライブラリとして作成
  • 言語は C#

HTTP モジュールを作成するための最小コード

// CustomHttpModule.cs

using System.Web;

public class CustomHttpModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += (sender, e) =>
        {
            HttpContext.Current.Response.Write("<p>This is Test</p>");
        };
    }

    public void Dispose() { }
}

配置方法

  1. C:\var\testweb\bin に CustomHttpModule.dll を置く
  2. IIS マネージャーで C:\var\testweb を Web サイトとして追加
    ※仮想ディレクトリではなく、Web サイトとして追加する。
    なので Default Web Site を無効にするか、Default Web Site でやるのであれば、Default Web Site の下に bin フォルダを作って、そこに dll を置く
  3. IIS マネージャーで Web サイトを選択し、機能ビューの「モジュール」を開く
  4. 右側にある、操作 > マネージドモジュールの追加 > CustomHttpModule を選択
    ※仮想ディレクトリだと「マネージドモジュールの追加」を行うことができない
    web.config が生成され、以下の内容になる
// web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <modules>
            <add name="CustomHttpModule" type="CustomHttpModule" />
        </modules>
    </system.webServer>
</configuration>
  1. C:\var\testweb\ に index.html を作成
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>テスト</body>
</html>
  1. IIS を再起動 管理者モードでコマンドプロンプトを起動し、以下を実行
iisreset

動作確認

ブラウザで http://localhost/ にアクセス

以下のようにオリジナルの html に <p>This is Test</p> が挿入される。

図1 HTTP モジュールによりタグが追加されている図1 HTTP モジュールによりタグが追加されている

「ページのソースを表示」の結果

<p>This is Test</p><html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>テスト</body>
</html>

デバッグ用のログ出力とログの参照方法

デバッグ用のコードを追加

Debug.WriteLine がデバッグログを出力する箇所

// CustomHttpModule.cs

using System.Diagnostics;
using System.Web;

public class CustomHttpModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        Debug.WriteLine("CustomHttpModule: Init 開始");

        context.BeginRequest += (sender, e) =>
        {
            Debug.WriteLine("CustomHttpModule: BeginRequest 開始");
            HttpContext.Current.Response.Write("<p>This is Test</p>");
        };
    }

    public void Dispose() { }
}

DebugView

  • DebugView for Windows (Sysinternals) をダウンロード
  • zip を解凍し、Dbgview.exe を 管理者権限 で実行(これはインストーラーではなくて、プログラムそのもの)
  • Capture > Capture Global Win32 をチェック(これで IIS の デバッグログを参照できるようになる)
  • http://localhost/ にアクセス
    以下のようにログが出力される 図2 DebugView図2 DebugView

ログが出力されない場合

IIS ワーカープロセス(w3wp.exe)のユーザー権限の設定によってはログが出力されない場合がある。
その場合は、アプリケーションプールの ID を ApplicationPoolIdentity から LocalSystem に設定すると表示される可能性が高くなる。

  • IIS の設定変更
    • アプリケーションプールの詳細設定 > プロセス > ID をビルトインアカウント LocalSystemに変更
    • IISを再起動