Fil*_*8kr 3 entity-framework asp.net-core-mvc asp.net-core-2.0
如何在Asp.Net Core 2.0中访问当前ApplicationUser(或UserManager)ActionFilter?
我试图锁定整个应用程序,直到用户接受EULA(最终用户许可协议),更改密码并填写所需的个人信息为止。
public class ApplicationUser : IdentityUser
{
...
public DateTime? DateEULAAccepted { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
这是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" }));
}
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的实例ActionFilter中Startup > ConfigureServices,如下所示:
...
services.AddMvc(options =>
{
options.Filters.Add(new ProfileRequiredActionFilter());
});
...
Run Code Online (Sandbox Code Playgroud)
尝试添加过滤器,ConfigureServices()如下所示:
services.AddMvc(options => {
options.Filters.Add<ProfileRequiredActionFilter>();
});
Run Code Online (Sandbox Code Playgroud)
然后可以将您的内容UserManager注入到过滤器中,如下所示:
public class ProfileRequiredActionFilter : IActionFilter
{
private UserManager<ApplicationUser> _userManager;
public ProfileRequiredActionFilter(UserManager<ApplicationUser> userManager)
{
_userManager = userManager
}
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" }));
}
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
992 次 |
| 最近记录: |