首页 > 解决方案 > 从类调用接口时出现 ArgumentNullException

问题描述

我正在尝试通过使用策略来设置授权,因为由于某种原因 ClaimsPrinciple 不起作用,所以我正在尝试这个。

我目前的问题是service返回为空。我试过UserManager<IdentityUser> UserManager = new UserManager<IdentityUser>();了,但是它给了我一个错误。

public class AdminRequirementHandler : AuthorizationHandler<AdminRequirement>
{
    public bool Check = false;
    IServiceProvider service { get; set; }
    protected override async Task HandleRequirementAsync(
                                      AuthorizationHandlerContext context, 
                                      AdminRequirement requirement)
    {
        var CurrentEmail = context.User.Identity.Name;
        string RoleName = requirement.ToString();
        await GetData(CurrentEmail, RoleName);
    }

    private async Task GetData(string CurrentEmail, string RoleName)
    {
        var UserManager = service.GetRequiredService<UserManager<IdentityUser>>();
        var user = await UserManager.FindByNameAsync(CurrentEmail);
        if (user != null)
        {
            var adminCheck = await UserManager.IsInRoleAsync(user, RoleName);
            if (adminCheck == true)
            {
                Check = true;
            }
            else
            {
                return;
            }
        }
    }
}

关于如何解决它的任何想法?

标签: c#asp.net.net-coreblazor

解决方案


AuthorizationHandlerContext.Resource 应该是 AuthorizationFilterContext 类型。您可以从中获取 HttpContext 以及作为 ServiceProvider 的 RequestServices。


推荐阅读