Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 默认验证消息ASP.NET核心_Validation_Asp.net Core - Fatal编程技术网

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()方法的意义是什么。扩展方法的源代码也有类似的功能