我们使用自定义策略来检查一些数据库要求(数据库中保留的 token ),并且我需要 session 信息,因此我注入(inject)了 IHttpContextAccessor 来使用 HttpContext.Session。
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_httpContext = contextAccessor.HttpContext;
}
我可以看到:
- 我没有正确检索 HttpContext.Session,它抛出 InvalidOperationException
- 请求不正确:路径为空,应该类似于“/Home/Index”
我在我的项目中重新使用了 SessionMiddleware,我可以看到用户 session 已正确恢复到 HttpContext 中,但在我的策略中我得到了错误的结果。 SessionMiddleware 正确添加在 MVC Middleware 之前。有什么想法吗?
解决方案(感谢@JoeAudette) 保留访问器直到需要 HttpContext。
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_accessor = contextAccessor;
}
protected override void Handle(AuthorizationContext context, TokenValidRequirement requirement)
{
// Right context ...
var contextHttp = _accessor.HttpContext;
}
最佳答案
不要在构造函数中获取上下文,而是尝试保留 contextAccessor 并等待获取实际上下文,直到您需要检查它之前
关于c# - 策略中的 HttpContext 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37008101/