沿线的这个问题,我想创建一个HTTP模块,将尽我们的请求和响应的一些自定义日志记录。 在这个问题最普遍的回答使用代码我有一个HTTP模块运行起来这的确做的工作:
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类是被引用的问题 )。
然而,反应似乎缺少一些HTTP头,我在看到提琴手(如“日”),更重要的是,当我打开压缩,我记录不会被压缩,而我在小提琴手看到的是响应。
所以我的问题 -是有可能记录压缩的内容或者是这种情况发生在后续步骤中我的模块不能在勾?
为了记录在案,我也试着处理PreSendRequestContent事件和响应仍是压缩。