【问题标题】:How to get the SessionStateBehavior for a request?如何获取请求的 SessionStateBehavior?
【发布时间】:2015-12-22 09:09:44
【问题描述】:
我知道SessionState 属性可用于为特定MVC 控制器的请求设置SessionStateBehavior。我的问题是,如何以编程方式确定当前请求的SessionStateBehavior?我看到HttpContext 有一个internal property for this,但是有什么办法可以公开吗?
我特别想知道会话状态行为是否被禁用。
【问题讨论】:
标签:
c#
asp.net
.net
asp.net-mvc
【解决方案1】:
HttpContext.Current.Session == null 将检查禁用的会话
HttpContext.Current.Session.IsReadOnly 将检查只读会话
【解决方案2】:
进一步研究,对于上面发布的确切问题,唯一可靠的解决方案似乎是使用反射访问内部 SessionStateBehavior 属性:
var behavior = (SessionStateBehavior)typeof(HttpContext)
.GetProperty("SessionStateBehavior", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(HttpContext.Current);
但是,对于检查会话状态是否已禁用的特定情况,在大多数情况下,对HttpContext.Current.Session 进行简单的空检查就足够了。我基于this question 中列出的原因,说明为什么该属性可能为空。