【发布时间】:2017-12-19 20:18:40
【问题描述】:
如何在 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中?什么不适合你? -
我不知道如何将 UserManager 注入...我在 Startup ConfigureServices 中实例化 ActionFilter,如下所示:
-
services.AddMvc(options => { options.Filters.Add(new ProfileRequiredActionFilter()); });
标签: entity-framework asp.net-core-mvc asp.net-core-2.0