代码之家  ›  专栏  ›  技术社区  ›  Christophe Gigax

策略中的HttpContext错误

  •  2
  • Christophe Gigax  · 技术社区  · 9 年前

    我们使用自定义策略检查一些数据库需求(数据库中持久化的令牌),并且我需要会话信息,所以我注入IHttpContextAccessor以使用HttpContent.session。

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

    我可以看到:

    1. 我无法正确检索HttpContext。会话,它抛出InvalidOperationException
    2. 请求不正确:路径为空,应该类似于“/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;
    }
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   Joe Audette    9 年前

    不要在构造函数中获取上下文,而是尝试保留contextAccessor,并等待获取实际上下文,直到需要检查它之前