将用户添加到角色,其中用户名是电子邮件地址

时间:2016-07-30 14:12:56

标签: c# asp.net asp.net-mvc entity-framework

调用以下代码将当前经过身份验证的用户分配给名为Admin的角色。已经使用正确配置的电子邮件地址创建了用户,我可以使用它进行身份验证。但是,我想使用下面的演示代码将用户添加到角色。

public ActionResult AddUserToRole()
{
    var userId = User.Identity.GetUserId();
    using (var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
        IdentityResult result = userManager.AddToRole(userId, "Admin");
     }
     return RedirectToAction("Index");
}

用户是使用新MVC 5应用程序中的模板代码创建的。模板代码需要用户名的电子邮件地址。但是,AddToRole行的结果会返回result.Succeeded = false,错误为

  

用户名jason@xxxxxxx.xx.xx无效,只能包含字母或   位数。

为什么对角色的调用应用验证器但是创建用户的调用不适用?这是所有模板代码。

现在,鉴于这是所有模板代码,我是否遗漏了某些内容,或者是否需要修改模板以让用户提供非电子邮件地址的用户名。

非常感谢。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。要解决它,请在调用AddToRole()之前添加以下行:

        userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false };

有人可能知道更优雅的解决方案,但这对我有用,所以我从未进一步调查过!

HTH