我知道SessionState
属性可用于为特定MVC控制器的请求设置SessionStateBehavior
。我的问题是,如何以编程方式确定当前请求SessionStateBehavior
?我看到HttpContext
有一个internal property for this,但有没有办法公开表明这一点?
特别是,我想知道会话状态行为是否已被禁用。
答案 0 :(得分:1)
HttpContext.Current.Session == null
将检查已停用的会话
HttpContext.Current.Session.IsReadOnly
将检查只读会话
答案 1 :(得分:0)
进一步研究,似乎上面发布的确切问题的唯一可靠解决方案是使用反射访问内部SessionStateBehavior
属性:
var behavior = (SessionStateBehavior)typeof(HttpContext)
.GetProperty("SessionStateBehavior", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(HttpContext.Current);
但是,对于检查会话状态是否已被禁用的特定情况,在大多数情况下,对HttpContext.Current.Session
进行简单的空检查就足够了。我的基础是this question中列出的原因,说明为什么该属性可能为空。