Asp.NET 尝试向用户添加角色时身份角色不起作用
Asp.NET Identity Roles not working when attempting to add Role to User
我目前正在使用带有 CreateAsync(newRoleName) 方法的 RoleManager 将角色添加到我们的数据库中 - 它工作正常。但是,当我尝试查询该角色时,它总是 returns 它不存在(即使我可以在数据库中看到它)。
任何人都可以提供一些关于为什么我无法使用角色的见解吗?
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创建新的User时,下面的方法会报错
var roleAddResult = userManager.AddToRoleAsync(newUser, "TestRole123");
异常错误:角色 [TESTROLE123] 不存在。
注意:我可以在 table 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");
}
}
我看到的问题之一 - 您需要在 *Async()
方法前使用关键字 await
:
var roleExists = await roleManager.RoleExistsAsync(role);
和
var roleCreated = await roleManager.CreateAsync(newRole);
等这将消除您需要执行的操作 Thread.Sleep(500);
- 问题很可能出在这一行上。
如果您不能使用异步方法,请使用方法的非异步版本:
var roleCreated = roleManager.Create(newRole);
我目前正在使用带有 CreateAsync(newRoleName) 方法的 RoleManager 将角色添加到我们的数据库中 - 它工作正常。但是,当我尝试查询该角色时,它总是 returns 它不存在(即使我可以在数据库中看到它)。
任何人都可以提供一些关于为什么我无法使用角色的见解吗?
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创建新的User时,下面的方法会报错
var roleAddResult = userManager.AddToRoleAsync(newUser, "TestRole123");
异常错误:角色 [TESTROLE123] 不存在。
注意:我可以在 table 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");
}
}
我看到的问题之一 - 您需要在 *Async()
方法前使用关键字 await
:
var roleExists = await roleManager.RoleExistsAsync(role);
和
var roleCreated = await roleManager.CreateAsync(newRole);
等这将消除您需要执行的操作 Thread.Sleep(500);
- 问题很可能出在这一行上。
如果您不能使用异步方法,请使用方法的非异步版本:
var roleCreated = roleManager.Create(newRole);