一直試圖將服務器端DataAnnotation驗證合併到我的項目中,並且我發現DataAnnotations有它自己的錯誤類型ValidationException。但是我的問題是,它一次只返回一個驗證錯誤,所以如果3個屬性驗證失敗,只會引發第一個驗證錯誤。我正在尋找一種方法將所有錯誤作爲異常拋出,所以不是通知用戶/開發人員驗證失敗,而是一次性指出哪些屬性/域未通過驗證。返回多個ValidationExceptions
我找到了Validator.TryValidateObject(...)方法,但它只是填充ValidationResults並讓開發人員選擇拋出和異常與否。我目前實現的是遍歷ValidationResults,從中創建一個ValidationExceptions列表,將列表包裝成一個AggregateException,然後在其InnerExceptions中拋出另一個帶有AggregateException的ValidationException。
ValidationContext validationContext = new ValidationContext(entity, null, null);
List<ValidationResult> validationResults = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject(entity, validationContext, validationResults, true);
if (!isValid)
{
List<ValidationException> validationErrors = new List<ValidationException>();
foreach (ValidationResult validationResult in validationResults)
{
validationErrors.Add(new ValidationException(validationResult.ErrorMessage);
}
throw new ValidationException("Entity validation failed.", new AggregateException(validationErrors));
}
所以基本上,我的問題是:
- 是否有一個原因,沒有內置的方式在同一時間拋出多個錯誤?也就是說,我是否缺少DataAnnotation驗證的一些最佳實踐?
- 有沒有更好的方法來實現我試圖實現的目標?
- 另外...如何將ValidationResult包裝到ValidationException中時包含成員名稱?
我和你有類似的情況,我假設你已經實現了一個體面的解決方案,它是可擴展的? –