尝试向用户添加角色时,ASP.NET身份角色无法正常工作



我当前使用rolemanager使用createAsync(newRoleName(方法向我们的数据库添加角色 - 正常工作。但是,当我尝试查询该角色时,它总是会返回它不存在(即使我可以在数据库中看到它(。

谁能就为什么我无法使用该角色提供一些见解?

        var roleExists = roleManager.RoleExistsAsync(role);
        if (!roleExists.Result)
        {
            var newRole = new IdentityRole(role)
            {
                Name = role,
                NormalizedName = role.ToUpper(),
            };
            var roleCreated = roleManager.CreateAsync(newRole);
            Thread.Sleep(500);  // Used to get result back first.
            var roleExistsYet = roleManager.RoleExistsAsync(role);
            if (!roleExists.Result)
            {
                // ALWAYS Returns [False]
            }
        }

当我们使用UserManager创建新用户时,最初的问题出现了,以下方法将导致错误

var roleAddResult = userManager.AddToRoleAsync(newUser, "TestRole123");

异常错误:角色[testrole123]不存在。

注意:我可以在表DBO.aspnetroles中的数据库中看到角色" Testrole123"(或任何其他角色(的条目。

任何洞察力或帮助都将受到赞赏。

环境:Visual Studio 2017,ASP.NET Core,C#

我不知道您是如何宣布您的rolemanager的,但是遵循代码对我有用。它是在启动cs中配置的,如果尚未创建角色,则会自动创建超级用户。也许这可以帮助您?

        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
        var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
        if (!roleManager.RoleExists("SuperUser"))
        {
            roleManager.Create(new IdentityRole("SuperUser"));
            //superuser
            var user = new ApplicationUser
            {
                UserName = " Name",
                Email = "Email",
                Firstname = "Firstname",
                Lastname = "Lastname"
            };
            var pass = "AwesomePasswordOverHere";
            var chkUser = await userManager.CreateAsync(user, pass);
            //make superuser 
            if (chkUser.Succeeded)
            {
                await userManager.AddToRoleAsync(user.Id, "SuperUser");
            }
        }

我看到的问题之一 - 您需要在*Async()方法前使用关键字await

var roleExists = await roleManager.RoleExistsAsync(role);

var roleCreated = await roleManager.CreateAsync(newRole);

等。这将消除您进行Thread.Sleep(500);的需求 - 很可能是此行的问题。

如果您不能执行异步方法,请使用该方法的非ASYNC版本:

var roleCreated = roleManager.Create(newRole);

相关内容

  • 没有找到相关文章

最新更新