我知道其他框架和语言也曾多次问过这个问题,但是我想知道一旦在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"
]
}
当它确保数据库中不存在电子邮件时,我不希望模型验证继续进行,只是返回该错误,不再继续验证。
答案 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方法中来配置此号码:
话虽如此,您不一定会控制处理这些错误的顺序。要处理该错误,您可能需要添加一些自定义验证逻辑,以上链接中也对此进行了讨论。