2
我们使用自定义策略来检查某些数据库需求(令牌在数据库中持久化),并且需要会话信息,因此我注入了IHttpContextAccessor以使用HttpContext.Session。策略中的HttpContext错误
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_httpContext = contextAccessor.HttpContext;
}
我可以看到:
- 我不正确HttpContext.Session检索,它引发InvalidOperationException
- 请求是不正确的:路径是空的,这应该是如'/首页/索引'
我在我的项目中重新使用SessionMiddleware,我可以看到用户会话已正确恢复到HttpContext中,但在我的策略中,我会得到错误的一个。 SessionMiddleware在MVC中间件之前正确添加。有任何想法吗 ?
解决方案(谢谢@JoeAudette) 保持accessor,直到你需要HttpContext。的
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_accessor = contextAccessor;
}
protected override void Handle(AuthorizationContext context, TokenValidRequirement requirement)
{
// Right context ...
var contextHttp = _accessor.HttpContext;
}
不是获取在构造函数的背景下之前,尽量保持contextAccessor围绕并等待获取实际上下文,直到需要检查之前 –
这就是解决方案:)对于这个问题,很多小时......也许您可以发布回复,以便将其标记为解决方案 –
,我已将其作为回答发布。 –