2016-05-03 64 views
2

我們使用自定義策略來檢查某些數據庫需求(令牌在數據庫中持久化),並且需要會話信息,因此我注入了IHttpContextAccessor以使用HttpContext.Session。策略中的HttpContext錯誤

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

我可以看到:

  1. 我不正確HttpContext.Session檢索,它引發InvalidOperationException
  2. 請求是不正確的:路徑是空的,這應該是如'/首頁/索引'

我在我的項目中重新使用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; 
} 
+3

不是獲取在構造函數的背景下之前,儘量保持contextAccessor圍繞並等待獲取實際上下文,直到需要檢查之前 –

+0

這就是解決方案:)對於這個問題,很多小時......也許您可以發佈回覆,以便將其標記爲解決方案 –

+0

,我已將其作爲回答發佈。 –

回答

2

不是獲取在構造函數的背景下,建議保持contextAccessor周圍,等待獲得實際的情況下,直到你需要檢查它