【问题标题】:Non alpha numeric characters in Username in MVCMVC中用户名中的非字母数字字符
【发布时间】:2015-10-02 18:18:15
【问题描述】:

我成功地在我的用户名中获取了非字母数字字符,我现在遇到的问题是当我尝试为用户分配角色时它抛出了一个无效的用户名错误。它说“只能包含字母和数字。

这是我添加的允许用户名中的字符;

public AccountController(UserManager<ApplicationUser> userManager)
    {
        UserManager = userManager;
        var userValidator = UserManager.UserValidator as   UserValidator<ApplicationUser>;
        userValidator.AllowOnlyAlphanumericUserNames = false;
    }

这是我得到错误的地方;

public bool AddUserToRole(string userId, string roleName)
    {
        var um = new UserManager<ApplicationUser>(
            new UserStore<ApplicationUser>(new ApplicationDbContext()));
        var idResult = um.AddToRole(userId, roleName);
        return idResult.Succeeded;

idResult.Erorrs[0] = "用户名J.Blow无效,只能包含字母或数字。"

为什么我会得到这个。我需要在其他地方更改用户名的验证吗?

谢谢,提前。

克林特

【问题讨论】:

  • um.UserValidator 需要指向您的 userValidator 实例。

标签: c# asp.net asp.net-mvc asp.net-identity


【解决方案1】:

根据您的代码,您正在创建一个 UserManager 的新实例,并在您的 AddUserToRole 方法中使用它。因此忽略您在控制器中设置的UserManager

如果您重构代码以便可以在 AddUserToRole 方法中使用控制器中实例化的代码,那应该可以工作。

【讨论】:

  • 另一种思考方式。每次你说 new SomeClass 时,你都会创建它的一个新副本。对一个副本进行更改不会影响另一个副本。您要么需要将验证器添加到第二个 sn-p 中的代码中,要么将注入控制器的用户管理器传递回您的服务层(或第二个代码块所在的任何位置)
  • 我刚刚将验证器添加到新代码 sn-p 以使其现在可以工作。使用这个身份框架工作对我来说仍然有点灰暗。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
相关资源
最近更新 更多