我正在使用数据注释来验证后端中的导入数据。当大多数人使用它来验证前端字段(例如登录表单或应用程序表单)时,这似乎是个坏主意。但是,对于我的项目而言,这是一个了不起的想法。与其使用大量的if-else语句,现在,我的代码更易于阅读和理解。
在我了解数据注释之前,对于每个模型,我必须创建自己的验证类,该类包含一堆如我所说的if-else语句。在理解验证逻辑时引起了很多困惑。
现在,有了数据注释,我只需要使用一种方法来验证模型。
public virtual string ValidateByAnnotations(ImportModel model)
{
string errorMessage = "";
//errorCount = 0;
var validationContext = new ValidationContext(model, serviceProvider: null, items: null);
var validationResults = new List<ValidationResult>();
var isValid = System.ComponentModel.DataAnnotations.Validator.TryValidateObject(model, validationContext, validationResults, true);
if (!isValid)
{
foreach (ValidationResult message in validationResults)
{
if (errorMessage.Contains(message.ToString())) { continue; }
if (errorCount < maxErrorAllowed)
{
errorCount++;
errorMessage += errorMessage.Length > 0 ? " " + message.ErrorMessage : message.ErrorMessage;
}
else { return errorMessage; }
}
}
return errorMessage;
}
但是,这只是冰山一角。我面临的另一个问题是验证的性能。数据注释可以帮助我和我的同事在很多方面理解验证,但是新验证的过程比旧验证要慢得多。有什么方法可以将数据注释保留在我的项目中并增强验证的性能?