如何在ASP.NET Core Mvc中将Unicode字符作为UserName?

时间:2018-02-22 14:19:25

标签: c# unicode asp.net-identity asp.net-core-mvc-2.0

在我的ASP.NET核心应用程序中,我想从其他语言中获取UserName而不是英语,但是当我尝试创建用户时,我收到了错误

"User name 'myUnicodeLang' is invalid, can only contain letters or digits."

如何为UserManager允许Unicode字符?我发现了一个问题,如何将电子邮件作为UserName,解决方案是。

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

但它在我的项目中没有工作,它说Using the Generic Type UserManager<TUser> requires 1 type argument

#Edit

Controller Constructor

public AuthController(UserManager<SchoolUser> userManager,
        SignInManager<SchoolUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;

        //Error here
        UserManager.UserValidator = new UserValidator<SchoolUser>
        (userManager) 
         { 
           AllowOnlyAlphanumericUserNames = false };
         }
     }

1 个答案:

答案 0 :(得分:3)

问题中的代码看起来像是尝试将ASP.NET MVC代码添加到Core MVC项目中。这是行不通的,因为在ASP.NET Core MVC中,UserManager 没有具有UserValidator属性。它有一个UserValidators集合,允许添加多个自定义验证器。

UserValidator也已更改,并且本身不包含任何配置设置。

配置允许字符的最简单方法是使用允许设置属性的AddIdentity()中的Startup.ConfigureServices重载。替换:

services.AddIdentity<ApplicationUser, IdentityRole>()

services.AddIdentity<ApplicationUser, IdentityRole>(options=>
{
    options.User.AllowedUserNameCharacters = "whatever";
})

默认值为"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+",可以处理大多数电子邮件地址

您可以为此添加额外的字符,例如:

services.AddIdentity<ApplicationUser, IdentityRole>(options=>
{
    var allowed = options.User.AllowedUserNameCharacters 
                  + "........";
    options.User.AllowedUserNameCharacters = allowed;
})