MVC - Roles.AddUserToRole抛出ProviderException。找不到用户@username

时间:2016-08-03 16:51:05

标签: c# asp.net-mvc roles role-manager

这是我第一次使用RoleManager,我在向角色添加用户名时遇到问题。目标是检查用户(当前登录的用户)是否为管理员(SQL数据库中为isAdmin = 1)。我在LoginController中使用的是:

var usr = db.Users.Where(u => u.UserName.ToLower() == userLogin.UserName.ToLower() && 
u.Password.Equals(userLogin.Password, StringComparison.Ordinal)).FirstOrDefault();

if (usr != null)
{
   FormsAuthentication.SetAuthCookie(usr.UserName, false);
   if (usr.IsAdmin == true)
   {
      if(!Roles.RoleExists("Admin"))
           Roles.CreateRole("Admin");
           var x = Roles.GetAllRoles();
           if(!Roles.IsUserInRole(usr.UserName, "Admin"))
               Roles.AddUserToRole(usr.UserName, "Admin");
    }
    return RedirectToAction("Index", "Home");
}

我在每一行中都设置了断点,并且永远不会达到Roles.CreateRole("Admin");,这意味着有一个名为“Admin”的角色。但是,var x = Roles.GetAllRoles();始终显示为null。

总是达到

if(!Roles.IsUserInRole(usr.UserName, "Admin")),因此当前未将该用户分配给该角色,但我在下一行收到了ProviderException,附加信息为:“找不到用户”_username“。

My Web Config以防任何人需要它:

<roleManager enabled="true" defaultProvider="MyRoleProvider">
  <providers>
    <clear />
    <add name="MyRoleProvider" type="System.Web.Providers.DefaultRoleProvider" 
    connectionStringName="StoreFrontConnectionString" applicationName="/"/>
  </providers>
</roleManager>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我自己只是解决了这个问题,可能是你遇到了同样的问题。

在我的情况下,我的web.config有点错误。确保配置文件提供程序,成员资格提供程序和角色管理器的 applicationName 参数在每种情况下都相同。我在其中一个中输入了一个拼写错误,这意味着看起来的用户就好像它实际上是用于不同的应用程序一样,所以当我调用AddUserToRole时它会抛出异常。