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

时间:2010-03-31 21:12:05

标签: asp.net iis httpmodule

我编写了一个添加响应过滤器的HttpModule。过滤器捕获页面输出并将其存储在会话变量中。

  1. 我可以在HttpModule中访问HttpContext.Current.Session。
  2. HttpModule正在处理PostAcquireRequestState事件。
  3. 我仍然可以在PostAcquireRequestState事件中访问HttpContext.Current.Session。
  4. 在PostAcquireRequestState事件中,我添加了一个从Stream继承到Response.Filter的自定义流
  5. 从Stream.Write方法访问时,HttpContext.Current.Session为null。
  6. 使用InProc SessionState时一切正常。但是,我现在必须使用StateServer。使用StateServer,代码现在已经破坏。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您是否尝试过将HttpModule中的会话对象传递给过滤器构造函数并以此方式保存引用?

通常情况下,我永远不会依赖于在我的过滤器中访问HttpContext.Current,而是通过构造函数传递必要的值或设置一些属性,然后再将其分配给Response.Filter。它解耦事物并使其更易于维护。