在我的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 };
}
}
答案 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;
})