我正在尝试实现 IAuthenticationFilter( Web Api 2 风格,而不是 MVC 风格)并且我正在努力处理代码的执行顺序。我本来希望身份验证过滤器在任何基于 Controller 的东西之前运行,这样我就可以设置适当的主体,然后在某种基本 ApiController 中从我的 DbContext 加载相关的用户数据。
这是我追求的流程:
AuthenticationFilter ==> BaseController ==> Controller/Action
protected
属性(property)。 在 BaseController 中设置的用户记录。
我不确定将代码放在 BaseController 的何处以便在身份验证过滤器之后但在解析的 Controller /操作之前执行它。
问题
所以我的问题是双重的:我是否以错误的方式解决这个问题?如果没有,我应该如何执行第 2 步?
最佳答案
这就是我最终做的。在我的 BaseController 中,我创建了一个名为 LoggedInUser 的 protected 属性,并创建了一个特殊的 getter:
private User _loggedInUser;
protected User LoggedInUser
{
get
{
if (_loggedInUser != null) return _loggedInUser;
var identity = RequestContext.Principal.Identity;
var userId = identity.GetUserId();
_loggedInUser = MyDbContext.Users.Find(userId);
return _loggedInUser;
}
}
这允许我将代码保存在一个地方,即 BaseController,同时仍然允许我将获取用户的尝试推迟到身份验证发生之后。
关于asp.net-web-api2 - 如何在 AuthenticationFilter 之后、Action 之前在 ApiController 中运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37289144/