调用以下代码将当前经过身份验证的用户分配给名为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无效,只能包含字母或 位数。
为什么对角色的调用应用验证器但是创建用户的调用不适用?这是所有模板代码。
现在,鉴于这是所有模板代码,我是否遗漏了某些内容,或者是否需要修改模板以让用户提供非电子邮件地址的用户名。
非常感谢。
答案 0 :(得分:1)
我遇到了同样的问题。要解决它,请在调用AddToRole()之前添加以下行:
userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false };
有人可能知道更优雅的解决方案,但这对我有用,所以我从未进一步调查过!
HTH