我正在使用它将一个新创建的用户添加到角色:
var db = new ApplicationDbContext();
ApplicationDbContext context = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.AddToRole(user.Id, model.UserRole);
在我的解决方案中,用户名=电子邮件。
我发现,当用户名/电子邮件包含一个符号(+、-或类似的符号)时,它不会将用户添加到角色中。我得到的错误是"User name x is invalid, can only contain letters or digits.
"。成功添加了用户,只是AddToRole失败了。
但我不明白为什么。
在IdentityConfig.cs 中,AllowOnlyAlphanumericUserNames
设置为false
有什么想法吗?
我能想到两种可能的解决方案。
1.)按照您在评论中链接的解决方案,将您的代码示例编辑为:
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
userManager.AddToRole(user.Id, model.UserRole);
2.)在userManager
中重新创建UserValidator
,并尝试再次创建AddToRole
:
var db = new ApplicationDbContext();
ApplicationDbContext context = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.UserValidator = new UserValidator<ApplicationUser>(userManager) { AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true };
userManager.AddToRole(user.Id, model.UserRole);
我认为问题是,您正在创建UserManager的新实例,而如果IdentityConfig,则不使用该实例。尝试设置代码的var userManager = new UserManager<ApplicationUser>(userStore);
行之后的userManager.AllowOnlyAlphanumericUserNames = false;
通过添加下面的代码将AllowOnlyAlphanumericUserNames设为false,这就成功了。
userManager.UserValidator = new UserValidator<User>(userManager)
{
AllowOnlyAlphanumericUserNames = false
};