2

カスタム ポリシーを使用してデータベース要件 (データベースに永続化されたトークン) を確認します。また、セッション情報が必要なので、HttpContext.Session を使用するために IHttpContextAccessor を挿入しました。

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

わかります :

  1. HttpContext.Session を正しく取得できません。InvalidOperationException がスローされます。
  2. 要求が正しくありません: パスが 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;
}
4

1 に答える 1

2

コンストラクターでコンテキストを取得する代わりに、contextAccessor を維持し、チェックが必要になる直前まで実際のコンテキストを取得するのを待ちます。

于 2016-05-03T15:36:16.867 に答える