Validation 默认验证消息ASP.NET核心
我创建了自定义密码验证器,用自己的正则表达式检查输入的密码。但是当我测试它时,默认的错误信息会先显示,然后是我的。我不明白如何删除这个默认消息,这样就只剩下我的了。我的信息是“你的密码不正确” 错误消息: 还有一个代码: 验证器:Validation 默认验证消息ASP.NET核心,validation,asp.net-core,Validation,Asp.net Core,我创建了自定义密码验证器,用自己的正则表达式检查输入的密码。但是当我测试它时,默认的错误信息会先显示,然后是我的。我不明白如何删除这个默认消息,这样就只剩下我的了。我的信息是“你的密码不正确” 错误消息: 还有一个代码: 验证器: { public Task<IdentityResult> ValidateAsync(UserManager<User> manager, User user, string password) {
{
public Task<IdentityResult> ValidateAsync(UserManager<User> manager, User user, string password)
{
List<IdentityError> errors = new List<IdentityError>();
string pattern = "^(?=^.{12,}$)(?=.*[0-9]+)(?=.*[A-Z]+)(?=.*[a-z]+)(?=.*[&@^$%]+).*$";
if (!Regex.IsMatch(password, pattern))
{
return Task.FromResult(IdentityResult.Failed(new IdentityError
{
Code = "IncPass",
Description = "Your password is incorrect"
})) ;
}
return Task.FromResult(IdentityResult.Success);
}
}
{
公共任务ValidateSync(UserManager、用户用户、字符串密码)
{
列表错误=新列表();
字符串模式=“^(?=^.{12,}$)(?=.[0-9]+)(?=.[A-Z]+)(?=.[A-Z]+)(?=.[&@^$%]+).$”;
如果(!Regex.IsMatch(密码、模式))
{
返回Task.FromResult(IdentityResult.Failed)(新IdentityError
{
Code=“IncPass”,
Description=“您的密码不正确”
})) ;
}
返回Task.FromResult(IdentityResult.Success);
}
}
控制器方法
[HttpGet]
public IActionResult Register()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
User user = new User { Email = model.Email, UserName = model.Email, Year = model.Year };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
}
return View(model);
}
[HttpGet]
公共IActionResult寄存器()
{
返回视图();
}
[HttpPost]
公共异步任务寄存器(RegisterViewModel模型)
{
if(ModelState.IsValid)
{
User User=new User{Email=model.Email,UserName=model.Email,Year=model.Year};
var result=await\u userManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
返回重定向到操作(“索引”、“主页”);
}
其他的
{
foreach(result.Errors中的变量错误)
{
AddModelError(string.Empty,error.Description);
}
}
}
返回视图(模型);
}
启动
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<ApplicationContext>()
.AddDefaultTokenProviders()
.AddPasswordValidator<CustomPasswordValidator>();
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders()
.AddPasswordValidator();
只要调用AddIdentity
就会注册默认密码验证程序,即使您提供了额外的密码验证程序
在调用AddIdentity
之前,您需要注册密码验证器,如下所示:
services.TryAddScoped();
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
如您所见,您不再需要调用
AddPasswordValidator
。默认的PasswordValidator
依赖于名为IdentityErrorDescriber
的类
尽管可能会覆盖实现,但这似乎是为了本地化,可能很难达到您的目的。在说明您的问题时,请更具体一些。你想完成什么?你面临的问题是什么。请编辑您的帖子进行澄清。虽然这有一定的道理,但我想知道AddPasswordValidator()方法的意义是什么。扩展方法的源代码也有类似的功能