我正在尝试创建一个像这样更改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;
}
}
这样做会将响应的传输编码设置为chunked,而不是使用Content-Length
标头。
如果我删除设置了Response.Filter
的行,则响应会有Content-Length
标题。我们的应用程序取决于Content-Length
标题,有什么办法可以阻止这种行为吗?
答案 0 :(得分:1)
我的猜测是,设置过滤器会干扰输出的正常缓冲,因此输出现在被分块。
也许你可以通过让你的过滤器读到最后来模仿这种行为,即得到所有的输出和放大器。在您编写所有内容之前,根据您已阅读的内容设置内容长度标题。
虽然我害怕但这只是一个猜测。
西蒙