我们使用自定义策略检查一些数据库需求(数据库中持久化的令牌),并且我需要会话信息,所以我注入IHttpContextAccessor以使用HttpContent.session。
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_httpContext = contextAccessor.HttpContext;
}
我可以看到:
-
我无法正确检索HttpContext。会话,它抛出InvalidOperationException
-
请求不正确:路径为空,应该类似于“/Home/Index”
我在我的项目中重新使用了SessionMiddleware,我可以看到用户会话被正确地还原到HttpContext中,但在我的策略中,我会得到错误的会话。在MVC中间件之前正确添加了SessionMiddleware。有什么想法吗?
解决方案
(谢谢@JoeAudette)
在需要HttpContext之前保留访问器。
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_accessor = contextAccessor;
}
protected override void Handle(AuthorizationContext context, TokenValidRequirement requirement)
{
// Right context ...
var contextHttp = _accessor.HttpContext;
}