如何在Asp.Net Core 2.0的ActionFilter
中访问当前ApplicationUser
(或UserManager
)?
我正在尝试锁定整个应用程序,直到用户接受EULA(最终用户许可协议),更改其密码并填写必需的个人信息。
public class ApplicationUser : IdentityUser
{
...
public DateTime? DateEULAAccepted { get; set; }
...
}
下面是ActionFilter
代码:
public class ProfileRequiredActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
var CurUser = UserManager<ApplicationUser>.GetUserAsync(filterContext.HttpContext.User);
...
if (CurUser.Result.DateEULAAccepted.ToString() == null)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Account", action = "AgreeToEULA" }));
}
...
}
}
}
我正在Startup > ConfigureServices
中实例化ActionFilter
,如下所示:
...
services.AddMvc(options =>
{
options.Filters.Add(new ProfileRequiredActionFilter());
});
...
UserManager
注入到了你的ActionFilter
中?有什么问题出现了吗? - SpruceMoose