InvalidOperationException:角色testRole不存在

时间:2017-12-23 22:21:45

标签: .net-core asp.net-core-mvc asp.net-identity

我试图让accountController自动为每个新注册的用户分配角色,所以我最终做了这样的事情:

public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
        {

            if (ModelState.IsValid)
            {
                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
                var result = await _userManager.CreateAsync(user, model.Password);
                //there is where the error is being raised.
                await _userManager.AddToRoleAsync(user, "testRole");

                if (result.Succeeded)
                {
                 //here goes some code
                 //have also adding this line of code inside this if stmt
                //await _userManager.AddToRoleAsync(user, "testRole");
                }
                AddErrors(result);
            }
            return View(model);
        }

我做了StackOverFlow推荐的其他帖子但是,我一直有这个错误: InvalidOperationException:角色TESTROLE不存在。

  

Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore + d__34.MoveNext()   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   Microsoft.AspNetCore.Identity.UserManager + d__104.MoveNext()   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)System.Runtime.CompilerServices.TaskAwaiter.GetResult()   WebApplication2.Controllers.AccountController + d__17.MoveNext()   在AccountController.cs

注意:

  • 我在我的项目中使用PostgreSql,所以我创建了一个新项目 与MSSQL并最终出现相同的错误。
  • 我确保testRole在AspNetRoles表中。所以,这也没问题!

1 个答案:

答案 0 :(得分:2)

所以testRole是确切的名称,然后将其标准化为TESTROLE如何创建TestRole?我这样说是因为Identity会查找规范化版本。很明显,在这种情况下它并不存在。基本上,如果您没有使用RoleManager,那么创建角色的方式就会出现问题

创建角色的另一种方法是使用您的数据库上下文并以这种方式添加新角色,但如果您没有对NormalizedName字段条目使用大写,那么这就是您将获得的错误