【发布时间】:2012-06-18 13:59:22
【问题描述】:
按照this question 的思路,我想创建一个 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类在引用的question中)。
但是,响应似乎缺少我在 Fiddler 中看到的一些 HTTP 标头(例如“日期”),更重要的是,当我打开压缩时,我正在记录的响应没有被压缩,而我在 Fiddler 中看到的是。
所以我的问题 - 是否可以记录压缩内容,或者这是否发生在我的模块无法连接到的后续步骤中?
作为记录,我也尝试过处理 PreSendRequestContent 事件,但响应仍未压缩。
【问题讨论】:
-
你解决过这个问题吗?
-
不,不怕,不久之后我就放弃了我正在做的事情!祝你好运!
标签: asp.net logging iis-7 compression ihttpmodule