![](/img/trans.png)
[英]error message not visible after model validation in asp.net core 3
[英]Default validation message ASP.NET Core
我创建了自定义密码验证器来使用我自己的正则表达式检查输入的密码。 但是当我测试它时,首先显示默认错误消息,然后是我的。 而且我不明白如何删除此默认消息,因此只剩下我的消息。 我的消息是“您的密码不正确”。
并且有一个代码:
验证器:
{
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);
}
}
Controller 方法
[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);
}
启动
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<ApplicationContext>()
.AddDefaultTokenProviders()
.AddPasswordValidator<CustomPasswordValidator>();
只要您调用AddIdentity
,就会注册默认密码验证器,即使您提供了额外的密码验证器也是如此。
您需要在调用AddIdentity
之前注册您的密码验证器,如下所示:
services.TryAddScoped<IPasswordValidator<User>, CustomPasswordValidator>();
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<ApplicationContext>()
.AddDefaultTokenProviders();
如您所见,您不再需要AddPasswordValidator
调用。
默认PasswordValidator
取决于名为IdentityErrorDescriber
的 class 。
尽管看起来可以覆盖实现,但这似乎是为了本地化,可能难以实现您的意图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.