Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试向用户添加角色时,Asp.NET标识角色不起作用_C#_Asp.net_Asp.net Identity_Roles_Usermanager - Fatal编程技术网

C# 尝试向用户添加角色时,Asp.NET标识角色不起作用

C# 尝试向用户添加角色时,Asp.NET标识角色不起作用,c#,asp.net,asp.net-identity,roles,usermanager,C#,Asp.net,Asp.net Identity,Roles,Usermanager,我目前正在使用RoleManager和CreateAsync(newRoleName)方法将角色添加到数据库中,该方法工作正常。但是,当我试图查询该角色时,它总是返回它不存在(即使我可以在数据库中看到它) 有人能提供一些关于我为什么不能使用该角色的见解吗 var roleExists = roleManager.RoleExistsAsync(role); if (!roleExists.Result) { var newR

我目前正在使用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核心,C#

我不知道您是如何声明角色管理器的,但下面的代码对我很有用。它在startup.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");
            }
        }
var角色管理器=新角色管理器(新角色存储(上下文));
var userManager=newusermanager(newuserstore(context));
如果(!roleManager.RoleExists(“超级用户”))
{
创建(新的IdentityRole(“超级用户”);
//超级用户
var user=新应用程序用户
{
UserName=“Name”,
Email=“Email”,
Firstname=“Firstname”,
Lastname=“Lastname”
};
var pass=“AwesomePasswordOverHere”;
var chkUser=await userManager.CreateAsync(user,pass);
//成为超级用户
如果(chkUser.successed)
{
等待userManager.AddToRoleAsync(user.Id,“SuperUser”);
}
}

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

var roleExists = await roleManager.RoleExistsAsync(role);

等。这将删除你需要做的
线程睡眠(500)-最有可能的问题是这一行

如果无法使用异步方法,请使用以下方法的非异步版本:

var roleCreated = roleManager.Create(newRole);

我现在看到了,我想。AddToRoleAsync,您使用的是整个用户,而不仅仅是Idis—您上面提到的在.net核心或.net完整框架中完成的代码?您在RoleManager和UserManager上使用的方法在.NETCore的实现中似乎不可用。在.net core中,UserManager的AddToRoleAsync()方法的实现接受一个完整的标识符,不幸的是,不仅仅是用户的id。对不起,它不是core。但core不允许您根据需要在应用程序中添加包。也许您缺少一个包或者更新了一个包?RoleManager中似乎不存在非异步版本
var roleCreated = roleManager.Create(newRole);