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

How to take Unicode characters as UserName in ASP.NET Core Mvc?

在我的 ASP.NET 核心应用程序中,我想从英语以外的其他语言获取用户名,但是当我尝试创建用户时出现错误

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

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

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

但它在我的项目中不起作用它说 Using the Generic Type UserManager<TUser> requires 1 type argument

#编辑

控制器构造函数

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

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

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

UserValidator 也发生了变化,它本身不包含任何配置设置。

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

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