如何获取请求的SessionStateBehavior?

时间:2015-09-24 16:50:35

标签: c# asp.net .net asp.net-mvc

我知道SessionState属性可用于为特定MVC控制器的请求设置SessionStateBehavior。我的问题是,如何以编程方式确定当前请求SessionStateBehavior?我看到HttpContext有一个internal property for this,但有没有办法公开表明这一点?

特别是,我想知道会话状态行为是否已被禁用。

2 个答案:

答案 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中列出的原因,说明为什么该属性可能为空。