カスタム ポリシーを使用してデータベース要件 (データベースに永続化されたトークン) を確認します。また、セッション情報が必要なので、HttpContext.Session を使用するために IHttpContextAccessor を挿入しました。
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_httpContext = contextAccessor.HttpContext;
}
わかります :
- HttpContext.Session を正しく取得できません。InvalidOperationException がスローされます。
- 要求が正しくありません: パスが null です。これは「/Home/Index」のようなものである必要があります
プロジェクトで SessionMiddleware を再利用したところ、ユーザー セッションが HttpContext に正しく復元されていることがわかりますが、私のポリシーでは間違ったセッションが取得されます。SessionMiddleware は、MVC ミドルウェアの前に正しく追加されます。何か案は ?
解決策(@JoeAudetteに感謝)HttpContextが必要になるまでアクセサーを保持します。
public TokenValidHandler(IHttpContextAccessor contextAccessor)
{
_accessor = contextAccessor;
}
protected override void Handle(AuthorizationContext context, TokenValidRequirement requirement)
{
// Right context ...
var contextHttp = _accessor.HttpContext;
}