代码之家  ›  专栏  ›  技术社区  ›  Laurence

asp.net自定义httpmodule-如何判断何时在write方法中写入最后一个html块?

  •  1
  • Laurence  · 技术社区  · 14 年前

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

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

    对于单个响应,write方法被多次调用——html似乎是以块的形式写入输出流的。我的问题是,我没有一种高效可靠的方法来判断当前块是否是最后一个块(关于为什么我想知道这一点,请参见下文)。我提出的唯一方法是检查块是否包含一个关闭的html标记,但这不是非常有效或可靠的。

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

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

    谢谢

    1 回复  |  直到 14 年前
        1
  •  0
  •   Ray    14 年前

    如果您可以计算出要从HTML源代码中写入的字节总数,那么在调用write()时只需计算字节数,就可以计算出何时写入最后一个块。

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