如何在ASP.NET Core 2.1中在第一个错误后停止验证

3
我知道这个问题在其他框架和语言中已经被问了好几次,但我想知道如何在ASP.NET Core 2.1中一旦出现第一个错误就停止模型验证。
    [Required(ErrorMessage = Email.requiredErrorMessage)]
    [DataType(DataType.EmailAddress, ErrorMessage = Email.formatErrorMessage)]
    [StringLength(Email.maximumLength, MinimumLength = Email.minimumLength, ErrorMessage = Email.rangeErrorMessage)]
    [EmailExists(ErrorMessage = Email.doesNotExistsMessage)]
    public string email { get; set; }

    [Required(ErrorMessage = ConfirmationCode.requiredErrorMessage)]
    [RegularExpression(ConfirmationCode.regularExpression, ErrorMessage = ConfirmationCode.formatErrorMessage)]
    public string confirmationCode { get; set; }

以上代码是API模型验证,在进行Patch请求时,我收到以下响应:
"email":[
"This email does not exist in database"
],
"confirmationCode":[
"Confirmation code format is invalid"
]
}

当模型验证确认电子邮件在数据库中不存在时,我不希望继续进行验证,只需返回该错误并停止验证即可。
1个回答

6

您可以在注册MVC服务时配置MVC将处理的最大错误数量:

services.AddMvc(options => options.MaxModelValidationErrors = 1);

请查看https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.1#model-state。MVC会一直验证字段,直到达到最大错误数(默认为200)。您可以通过将以下代码插入到Startup.cs文件的ConfigureServices方法中来配置此数字:
``` services.AddMvc() .AddMvcOptions(options => { options.MaxModelValidationErrors = 50; // 将错误数更改为50 }); ```
尽管如此,您并不一定能控制这些错误的处理顺序。为了解决这个问题,您可能需要添加一些自定义验证逻辑,有关详细信息请参见上面的链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接