8

我正在尝试创建一个 HttpModule 来更改Response.Filter类似的内容(对于此演示,只需将过滤器设置回自身):

public class ContentTrafficMonitor : IHttpModule
{
  public void Init( HttpApplication context )
  {
     context.BeginRequest += OnBeginRequest;
  }

  public void Dispose()
  {
  }

  private static void OnBeginRequest( object sender, EventArgs e )
  {
     var application = (HttpApplication) sender;
     application.Response.Filter = application.Response.Filter;
  }

}

这样做会将响应的传输编码设置为分块,而不是使用Content-Length标头。

如果我删除Response.Filter设置的行,则响应确实有Content-Length标题。我们的应用程序依赖于Content-Length标头,有没有办法防止这种行为?

4

1 回答 1

1

我的猜测是,设置过滤器会干扰输出的正常缓冲,因此输出现在被分块。

也许你可以通过让你的过滤器读到最后来模仿这种行为,即在你写出所有内容之前,根据你读过的内容获取所有输出并设置内容长度标题。

这只是一个猜测,虽然我很害怕。

西蒙

于 2011-02-24T13:34:22.390 回答