微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在将动作加载到asp.net核心之前检查一些条件

如何解决在将动作加载到asp.net核心之前检查一些条件

这是我的行动

  [HttpGet]
        [Authorize(Roles = "AccountExecutive")]
        public async Task<IActionResult> Index()
        {
            var me = await _userManager.GetUserAsync(HttpContext.User);
            var companyContactsviewmodel = new Contactsviewmodel(me);

            return View(companyContactsviewmodel);
        }

现在我想完全更新其密码强制,然后用户可以访问索引页面

现在尝试

 public class ProfilerequiredActionFilter : ActionFilterattribute
    {
            

        public override void OnActionExecuted(ActionExecutedContext context)
        {
            base.OnActionExecuted(context);
        }

        
    }

Startup.cs

   services.AddMvc(options=> {
                options.Filters.Add<ProfilerequiredActionFilter>();
            })

但是在过滤器中,我无法使用Usermanager,因此无法获取Currnet用户详细信息

我也想在Razor页面视图中做同样的事情

解决方法

如果要在ActionFilter中使用UserManager,可以将UserManager注入其中:

public class ProfileRequiredActionFilter : ActionFilterAttribute
    {
        private UserManager<IdentityUser> _userManager;    
        public ProfileRequiredActionFilter(UserManager<IdentityUser> userManager)
        {
            _userManager = userManager;
        }
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            base.OnActionExecuted(context);
        }

        
    }

在剃须刀页面中没有动作过滤器。您可以使用IAsyncPageFilter并判断其中的处理程序方法的名称:

using Microsoft.Extensions.DependencyInjection;
public class CustomPageFilter : IAsyncPageFilter
    {
       
        public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context,PageHandlerExecutionDelegate next)
        {
           
            if (context.HandlerMethod?.Name == "Update")
            {
                // Running inside a handler method named "Update".
                var svc = context.HttpContext.RequestServices;
                var usermanager = svc.GetService<UserManager<IdentityUser>>();
            }
        }



        Task IAsyncPageFilter.OnPageHandlerSelectionAsync(PageHandlerSelectedContext context)
        {
            return Task.CompletedTask;
        }
    }

startup.cs:

services.AddRazorPages().AddMvcOptions(options =>
            {
                options.Filters.Add(new CustomPageFilter());
            });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。