我正在使用 Azure 会话状态提供程序(DistributedCacheSessionStateStoreProvider
)并且效果很好。但是现在我有了一个结合了脚本的自定义HttpModule
。我在Response.Filter
中挂钩PostAcquireRequestState
。然后,我通过构造函数向我的自定义过滤器发送Session
引用:
application.Response.Filter = new CombinationFilter(application.Response.Filter, application, application.Session)
修改我的过滤器中的Session
,它在localhost(标准会话提供程序)上运行良好。但是当我修改Session
时, Azure 上发布了值,但后来它们消失了(它们没有被保留)。只有在过滤器中添加的那些消失,之前存在的那些仍然存在。我怀疑上次同步是在ReleaseRequestState
内(基于名称)。这显然是在处理Response.Filter
之前。
如何在链中稍后访问Session
并仍然存储它?
或者我可以在ReleaseRequestState
之前以某种方式使用过滤器吗?
答案 0 :(得分:0)
我终于解决了它。对于其他可能想知道如何实现这一目标的人:
application.PostRequestHandlerExecute += (sender, args) =>
{
if (YourCondition)
{
// performs premature flush to force the filter
application.Response.Flush();
String content = ((CombinationFilter) application.Response.Filter).OriginalContent;
// we need to remove the filter to not execute twice
application.Response.Filter = null;
// do my stuff here, we still have a Session and also the original content
// the content is stored on a filter in Flush() method before modification
// (by me => my custom property)
// do not write any other content
application.Response.SuppressContent = true;
// onwards it still saves Session in ReleaseRequestState (presumably)
}
};