c# - 策略中的 HttpContext 错误

标签 c# asp.net-core asp.net-identity-3

我们使用自定义策略来检查一些数据库要求(数据库中保留的 token ),并且我需要 session 信息,因此我注入(inject)了 IHttpContextAccessor 来使用 HttpContext.Session。

public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
     _httpContext = contextAccessor.HttpContext;
}

我可以看到:

  1. 我没有正确检索 HttpContext.Session,它抛出 InvalidOperationException
  2. 请求不正确:路径为空,应该类似于“/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/

相关文章:

asp.net-mvc - Entity Framework Core 与 .Net 4.7 MVC 身份问题

javascript - 使用 Asp.Net Identity 时如何在重定向到登录 View 之前发出通知消息?

c# - xna网络问题

c# - DDD\CQRS\Event Sourcing 和请求历史数据

c# - EF Core 属性值转换在派生实体配置中不起作用

c# - 在 MVC 6 中使用 REST 服务

c# - 在 ASP.NET Core Identity 中检查具有 Authorize 属性的多个策略之一

c# - 所有使用 C# 开发的应用程序都不是面向对象的?

c# - 使用 Linq Any() 和 All() 的 TDD

c# - 如何在 ASP.NET Core 中返回 403 Forbidden 响应作为 IActionResult