この質問に沿って、リクエストとレスポンスのカスタム ロギングを行う HttpModule を作成したいと思います。その質問に対する最も一般的な回答のコードを使用して、実際に機能する HttpModule を稼働させました。
class PortalTrafficModule : IHttpModule
{
public void Dispose()
{
// Do Nothing
}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
context.EndRequest += new EventHandler(context_EndRequest);
}
private void context_BeginRequest(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
// Create and attach the OutputFilterStream to the Response and store it for later retrieval.
OutputFilterStream filter = new OutputFilterStream(context.Response.Filter);
context.Response.Filter = filter;
context.Items.Add("OutputFilter", filter);
// TODO: If required the request headers and content could be recorded here
}
private void context_EndRequest(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
OutputFilterStream filter = context.Items["OutputFilter"] as OutputFilterStream;
if (filter != null)
{
// TODO: Log here - for now just debug.
Debug.WriteLine("{0},{1},{2}",
context.Response.Status,
context.Request.Path,
filter.ReadStream().Length);
}
}
}
(コードで参照されている OutputFilterStream クラスは、参照されている質問にあることに注意してください)。
ただし、応答には、Fiddler で表示される一部の HTTP ヘッダー (「Date」など) が欠落しているように見えます。さらに重要なことに、圧縮をオンにすると、ログに記録している応答は圧縮されませんが、Fiddler では圧縮されません。
だから私の質問- 圧縮されたコンテンツをログに記録することは可能ですか、それとも私のモジュールがフックできない次のステップでこれが起こっていますか?
念のため、 PreSendRequestContentイベントの処理も試みましたが、応答はまだ圧縮されていません。