我有一个基地API控制器我从ApiController与继承。在这里,我重写了ExecuteAsync并希望使用存储在Principal.Claims变量中的一些数据。但在调用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