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圍繞並等待獲取實際上下文,直到需要檢查之前 –
這就是解決方案:)對於這個問題,很多小時......也許您可以發佈回覆,以便將其標記爲解決方案 –
,我已將其作爲回答發佈。 –