ASP.NET自定义HTTPModule-如何判断何时在Write方法中写入最后一块HTML?

ASP.NET自定义HTTPModule-如何判断何时在Write方法中写入最后一块HTML?,asp.net,stream,httpmodule,http-headers,Asp.net,Stream,Httpmodule,Http Headers,我已经编写了一个Http模块,它钩住当前请求的Response.Filter属性,并在发送到客户端之前在HTML中进行各种替换 所有工作都是在Write方法中完成的,该方法重写基类流中的Write 对于单个响应,Write方法被多次调用——HTML似乎是以块的形式写入到输出流中的。我的问题是,我没有一个有效可靠的方法来判断当前块是否是我想知道的最后一块,请参见下文。我提出的唯一方法是检查区块是否包含结束html标记——但这不是非常有效或可靠 需要这样做的原因是,模块必须将刷新HTTP头添加到响应

我已经编写了一个Http模块,它钩住当前请求的Response.Filter属性,并在发送到客户端之前在HTML中进行各种替换

所有工作都是在Write方法中完成的,该方法重写基类流中的Write

对于单个响应,Write方法被多次调用——HTML似乎是以块的形式写入到输出流中的。我的问题是,我没有一个有效可靠的方法来判断当前块是否是我想知道的最后一块,请参见下文。我提出的唯一方法是检查区块是否包含结束html标记——但这不是非常有效或可靠

需要这样做的原因是,模块必须将刷新HTTP头添加到响应中,但前提是HTML满足某些条件,并且某些条件意味着不能添加头。因此,只有看到最后一个块时,代码才知道是否可以添加头。因此,我需要对最后一个区块进行测试,或者在每次调用写入时,如果当前HTML块通过测试(如果尚未添加),则添加标头;如果当前HTML块未通过测试(如果已添加),则删除标头

那么,有没有更好的方法来测试最后一个chuck,或者有没有更好的方法来测试响应中的某个特定头并将其删除?似乎没有什么方法可以做到这一点-只是附加头


谢谢

如果您可以计算出要从html源中写入的总字节数,那么只需在调用Write时计算字节数,就可以确定何时写入最后一个块


此外,将内容发送到浏览器后,不能添加标题。我认为,如果您避免调用Flush来实际发送输出,那么在写入内容后可以添加标题。

不幸的是,我找不到计算内容总字节数的方法。在我的Write方法中,我只能看到当前块的字节。仅供参考,我在添加标头时没有问题。源流是否提供长度属性?是的,但该流是只写的,并且在您尝试调用任何读取方法时立即引发异常。应该提到这一点!我不确定为什么它是只写的,我从一些o/s代码中复制了这个模块的想法。输出流可能是只写的,但是eh输入源呢?html从何而来?