我正在尝试在成功创建用户后将用户添加到角色。
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (!ModelState.IsValid) return View(model);
var user = new ApplicationUser
{
UserName = model.PhoneNumber,
PhoneNumber = model.PhoneNumber,
NationalId = model.NationalId,
FullName = model.FullName
};
var result = await _userManager.CreateAsync(user, model.NationalId);
if (result.Succeeded)
{
var res = await _userManager.AddToRoleAsync(user, "Admin");
await _signInManager.SignInAsync(user, false);
_logger.LogInformation(3, "Applicant created a new account with password.");
return RedirectToLocal(returnUrl);
}
AddErrors(result);
// If we got this far, something failed, redisplay form
return View(model);
}
但是,我收到了这个错误。
处理请求时发生未处理的异常。
InvalidOperationException:角色ADMIN不存在。
更新 我打电话给
var myrole = await _roleManager.FindByNameAsync("Admin");
并返回null。但是当我检查时
var roles = _roleManager.Roles
我得到了所有角色,包括&#34; Admin&#34;
答案 0 :(得分:0)
我在种子方法中发现了问题。但是我不明白。
在种子方法中,我使用RoleStore添加角色。
var roles = new[] {"Admin", "Applicant", "Student", "Role1", "Role2", "Role3", "Role4"};
foreach (var role in roles)
{
var roleStore = new RoleStore<IdentityRole>(context);
if (!context.Roles.Any(r => r.Name == role))
await roleStore.CreateAsync(new IdentityRole(role));
}
在数据库表AspNetRoles中成功创建的角色。
但是当采取行动时,从未找到角色。
我用RoleManager替换了RoleStore
await _roleManager.CreateAsync(new IdentityRole(role));
和魔术一样,一切都成功了。我将进一步研究差异和原因,以便更多地了解它。