【发布时间】:2016-08-19 09:10:37
【问题描述】:
我有一个从 ApiController 继承的基本 api 控制器。在其中,我将覆盖 ExecuteAsync 并希望使用存储在 Principal.Claims var 中的一些数据。但是在调用 base.ExecuteAsync() 之前它是空的,并且在调用它之后为时已晚。我没有看到其他可以覆盖的内容来帮助解决这个问题?
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;
}
}
【问题讨论】:
-
您确定需要重写此方法吗?你想实现什么行为?
-
我在管道中找不到另一种方法来覆盖。最终目标是在我的基础 ApiController 上拥有一些属性,以便继承控制器可以使用它们。我需要加载这些属性的信息在 Principal.Claims 集合中。
标签: c# model-view-controller asp.net-web-api asp.net-identity owin