HTTP モジュールの作成
プログラミング
公開: 2025年03月13日
目次
-
- 5.1. デバッグ用のコードを追加
- 5.2. DebugView
- 5.2.1. ログが出力されない場合
概要
- .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() { }
}
配置方法
- C:\var\testweb\bin に CustomHttpModule.dll を置く
- IIS マネージャーで C:\var\testweb を Web サイトとして追加
※仮想ディレクトリではなく、Web サイトとして追加する。
なので Default Web Site を無効にするか、Default Web Site でやるのであれば、Default Web Site の下に bin フォルダを作って、そこに dll を置く - IIS マネージャーで Web サイトを選択し、機能ビューの「モジュール」を開く
- 右側にある、操作 > マネージドモジュールの追加 > 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>
- C:\var\testweb\ に index.html を作成
<html>
<head>
<meta charset="UTF-8">
</head>
<body>テスト</body>
</html>
- IIS を再起動 管理者モードでコマンドプロンプトを起動し、以下を実行
iisreset
動作確認
ブラウザで http://localhost/ にアクセス
以下のようにオリジナルの html に <p>This is Test</p>
が挿入される。
「ページのソースを表示」の結果
<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
ログが出力されない場合
IIS ワーカープロセス(w3wp.exe)のユーザー権限の設定によってはログが出力されない場合がある。
その場合は、アプリケーションプールの ID を ApplicationPoolIdentity
から LocalSystem
に設定すると表示される可能性が高くなる。
- IIS の設定変更
- アプリケーションプールの詳細設定 > プロセス > ID をビルトインアカウント
LocalSystem
に変更 - IISを再起動
- アプリケーションプールの詳細設定 > プロセス > ID をビルトインアカウント