为什么HttpContext.Current.Session在HttpModule中可用,但在Response.Filter中不可用?

问题描述:

我已经写了,增加了一个响应滤波器的HTTP模块。过滤器捕获页面输出并将其存储在会话变量中。为什么HttpContext.Current.Session在HttpModule中可用,但在Response.Filter中不可用?

  1. 我能够访问我的HttpModule中的HttpContext.Current.Session。
  2. 的HTTP模块是处理PostAcquireRequestState事件。
  3. 我仍然能够在PostAcquireRequestState事件访问HttpContext.Current.Session。
  4. 在PostAcquireRequestState情况下,我补充一点,从流继承到Response.Filter从Stream.Write方法访问时
  5. HttpContext.Current.Session是空的自定义数据流。

一切使用一个inproc SessionState的时候工作得很好。不过,我现在必须使用StateServer。使用StateServer,代码现在被破坏了。

任何想法?

你试过从您的HttpModule传递会话对象添加到您的过滤器的构造和方式持有的参考?

通常我会永远依靠我的过滤器访问HttpContext.Current,但其分配给Response.Filter前通过通过构造函数或设置某些属性必要的值。它将事物分离并使其更易于维护。