我有一个MVC应用程序和一个名为AuthorisationFilter
的自定义类,其.NET接口为IAuthorizationFilter
,这有一个OnAuthorization
方法,当我点击我的网站时会调用它,那时我开始验证用户的安全访问权限(可行),但我不想一直这样做,因为这很费时。
在此我尝试使用Session
存储临时的登录信息(顺便提一下这是一个内部应用程序),但我不能像我一样工作期待。我不能只使用HttpContext
,因此不断创建HttpContextBase
的新实例,我假设它正在清除会话。我的代码如下:
internal void SetSecurityLevel(int token)
{
HttpContextBase _cBase = new HttpContextWrapper(HttpContext.Current);
_cBase.Session["SecurityRights"] = token;
}
internal int GetSecurityLevel()
{
HttpContextBase _cBase = new HttpContextWrapper(HttpContext.Current);
if (_cBase.Session["SecurityRights"] == null)
{
SetSecurityLevel(-1);
}
return (int)_cBase.Session["SecurityRights"];
}
请注意,这只是代码的一部分,SetSecurityLevel通过单独的方法调用设置为正确的值(未显示)
无论如何,我真正想要做的是在这个类中设置会话并保持它。我尝试了几种不同的方法,包括在初始化类时设置上下文,但我最终在GetSecurityLevel中的.Session
对象上使用了NullReference
private HttpContextBase _cBase = new HttpContextWrapper(HttpContext.Current);
public AuthorisationFilter()
{
_cBase = new HttpContextWrapper(HttpContext.Current);
}
我有没有办法在课堂上做到这一点?
答案 0 :(得分:0)
你是对的,你不能在构造函数中设置,但是当上下文可用时你可以在OnActionExecuting
public override void OnActionExecuting(ActionExecutedContext filterContext)
{
_session = = filterContext.HttpContext.Session;
我想知道为什么你要在过滤器中设置这个安全级别,而不是直接从它需要的位置进行。