IIS 7.5 ASP.NET HttpModule - 设置Response.Filter会导致分块编码

Eva*_*van 8 asp.net iis iis-7 httpmodule content-length

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

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;
  }
Run Code Online (Sandbox Code Playgroud)

}

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

如果我删除设置的行Response.Filter,则响应确实有Content-Length标题.我们的应用程序取决于Content-Length标题,有什么方法可以防止这种行为?

Sim*_*sey 1

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

也许您可以通过让过滤器读取直到结束来模仿该行为,即获取所有输出并根据您在写入所有读出内容之前所读取的内容设置内容长度标头。

虽然我担心这只是一个猜测。

西蒙