私はApiControllerから継承しているベースAPIを持っています。私はExecuteAsyncをオーバーライドし、Principal.Claims varに格納されているデータの一部を使用したいと考えています。 base.ExecuteAsync()を呼び出す前に空であり、呼び出した後に遅すぎます。私はこれを助けるために他に何かを見いだすことはありませんか?ApiControllerはUser.Claimsにアクセスするためにオーバーライドします
public class ApiControllerBase : ApiController
{
public MyUser CurrentUser { get; set; }
public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
{
// principal.claims is empty
ClaimsPrincipal principal = (ClaimsPrincipal)RequestContext.Principal; // principal.claims is empty
var rv = base.ExecuteAsync(controllerContext, cancellationToken);
// principal.claims is now populated but the controller.action that inherits from this basecontroller has already fired and thrown an exception since CurrentUser is null.
principal = (ClaimsPrincipal)RequestContext.Principal;
}
}
この方法をオーバーライドする必要がありますか?達成したい行動は? – MaKCbIMKo
オーバーライドするパイプラインに別のメソッドが見つかりませんでした。最終的な目標は、ベースのApiControllerにいくつかのプロパティを持たせて、継承するコントローラがそれらを使用できるようにすることです。これらのプロパティをロードするために必要な情報は、Principal.Claimsコレクションにあります。 – user3953989