Identity usermanager无法找到Role

时间:2016-12-14 11:09:25

标签: c# asp.net-core

我正在尝试在成功创建用户后将用户添加到角色。

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;

1 个答案:

答案 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));

和魔术一样,一切都成功了。我将进一步研究差异和原因,以便更多地了解它。