C# 如何在ASP.NET核心Mvc中使用Unicode字符作为用户名?
在我的ASP.NET核心应用程序中,我想从英语以外的其他语言获取用户名,但当我尝试创建一个用户时,出现了错误C# 如何在ASP.NET核心Mvc中使用Unicode字符作为用户名?,c#,unicode,asp.net-identity,asp.net-core-mvc-2.0,C#,Unicode,Asp.net Identity,Asp.net Core Mvc 2.0,在我的ASP.NET核心应用程序中,我想从英语以外的其他语言获取用户名,但当我尝试创建一个用户时,出现了错误 “用户名‘myUnicodeLang’无效,只能包含字母或数字。” 如何允许我的用户管理器使用Unicode字符?我发现了一个问题,如何将电子邮件作为用户名,解决方案是 UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumeri
“用户名‘myUnicodeLang’无效,只能包含字母或数字。”
如何允许我的用户管理器使用Unicode字符?我发现了一个问题,如何将电子邮件作为用户名,解决方案是
UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager)
{
AllowOnlyAlphanumericUserNames = false
};
UserManager.UserValidator=新的UserValidator(UserManager)
{
AllowOnlyAlphanumericUserNames=false
};
但是它在我的项目中不起作用,它说使用泛型类型UserManager需要1个类型参数
#编辑
控制器构造函数
public AuthController(UserManager<SchoolUser> userManager,
SignInManager<SchoolUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
//Error here
UserManager.UserValidator = new UserValidator<SchoolUser>
(userManager)
{
AllowOnlyAlphanumericUserNames = false };
}
}
public AuthController(UserManager UserManager,
SignInManager(签名管理员)
{
_userManager=userManager;
_signInManager=signInManager;
//这里出错
UserManager.UserValidator=新的UserValidator
(用户管理器)
{
AllowOnlyAlphanumericUserNames=false};
}
}
问题中的代码看起来像是试图将ASP.NET MVC代码添加到核心MVC项目中。这不起作用,因为在ASP.NET核心MVC中,UserManager没有UserValidator属性。它有一个UserValidators
集合,允许添加多个自定义验证器
UserValidator也已更改,并且本身不包含任何配置设置
配置允许的字符的最简单方法是在Startup.ConfigureServices
中使用允许设置属性的AddIdentity()
重载。替换:
services.AddIdentity<ApplicationUser, IdentityRole>()
问题中的代码看起来像是试图将ASP.NET MVC代码添加到核心MVC项目中。这不起作用,因为在ASP.NET核心MVC中,UserManager没有UserValidator属性。它有一个UserValidators
集合,允许添加多个自定义验证器
UserValidator也已更改,并且本身不包含任何配置设置
配置允许的字符的最简单方法是在Startup.ConfigureServices
中使用允许设置属性的AddIdentity()
重载。替换:
services.AddIdentity<ApplicationUser, IdentityRole>()
.NET字符串是Unicode。但错误并不是这样说的。它说登录名的验证规则只允许拉丁字母和数字。@Panagiotis Kanavos,是的,我知道,但如何设置自定义验证?另一方面,用户登录名不是用户名。想象一下,如果你使用的机器没有合适的keybard@Panagiotis Kanavos,你试图从国外登录一个网站,想象一下它只在一个固定的区域使用,那么我怎么做?你已经找到了方法。语法错误抱怨实际错误-在调用newuservalidator(UserManager)
时,您应该传递一个实际的UserManager实例,而不是类型名称。NET字符串是Unicode。但错误并不是这样说的。它说登录名的验证规则只允许拉丁字母和数字。@Panagiotis Kanavos,是的,我知道,但如何设置自定义验证?另一方面,用户登录名不是用户名。想象一下,如果你使用的机器没有合适的keybard@Panagiotis Kanavos,你试图从国外登录一个网站,想象一下它只在一个固定的区域使用,那么我怎么做?你已经找到了方法。语法错误抱怨实际错误-在调用新UserValidator(UserManager)
时,在向选项.User.AllowedUserNameCharacters添加myUnicodes后,您应该传递实际的UserManager实例,而不是类型名称它正在工作
到选项.User.AllowedUserNameCharacters
services.AddIdentity<ApplicationUser, IdentityRole>(options=>
{
var allowed = options.User.AllowedUserNameCharacters
+ "........";
options.User.AllowedUserNameCharacters = allowed;
})