AddToRole 失败并在用户名中输入 + 号?

AddToRole fails with a + sign in the username?

我正在使用它来将新创建的用户添加到角色:

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);

在我的解决方案中,用户名 = 电子邮件。

我发现,当 username/email 包含符号(+、- 或类似符号)时,它不会将用户添加到角色。我得到的错误是“User name x is invalid, can only contain letters or digits.”。 用户添加成功,只是AddToRole失败了。

但是我想不通为什么。

AllowOnlyAlphanumericUserNames设置为假,在IdentityConfig.cs

有什么想法吗?

我认为问题在于,您正在创建 UserManager 的新实例,而不是使用 IdentityConfig 的实例。尝试设置 userManager.AllowOnlyAlphanumericUserNames = false; 在您的代码 var userManager = new UserManager<ApplicationUser>(userStore); 行之后

我能想到两种可能的解决方案。

1.) 按照 the solution you linked in the comments 将您的代码示例编辑为:

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);

通过添加下面的代码将 AllowOnlyAlphanumericUserNames 设置为 false,这样就可以了。

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