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

时间:2018-10-06 15:35:53

标签: c# asp.net-core-webapi asp.net-core-2.1 model-validation

我知道其他框架和语言也曾多次问过这个问题,但是我想知道一旦在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模型的验证,并在发出补丁请求后收到以下响应:

"email":[
"This email does not exist in database"
],
"confirmationCode":[
"Confirmation code format is invalid"
]
}

当它确保数据库中不存在电子邮件时,我不希望模型验证继续进行,只是返回该错误,不再继续验证。

1 个答案:

答案 0 :(得分:4)

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

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

请参见https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.1#model-state

  

MVC将继续验证字段,直到达到最大错误数(默认为200)。您可以通过将以下代码插入Startup.cs文件的ConfigureServices方法中来配置此号码:

话虽如此,您不一定会控制处理这些错误的顺序。要处理该错误,您可能需要添加一些自定义验证逻辑,以上链接中也对此进行了讨论。