IValidatableObject.Validate() 对比 Validator.TryValidateObject()
IValidatableObject.Validate() vs Validator.TryValidateObject()
我见过的大多数使用 IValidatableObject 的示例都使用验证器来验证对象,如下所示:
IEnumerable<ValidationResult> ValidateMyModel(IValidatableObject model){
var validationResults = new List<ValidationResult>();
Validator.TryValidateObject(model, new ValidationContext(model), validationResults);
return validationResults;
}
但我也看到过 IValidatableObject.Validate() 方法是这样使用的:
IEnumerable<ValidationResult> ValidateMyModel(IValidatableObject model){
return model.Validate(new ValidationContext(model));
}
这两种方法之间是否存在任何功能差异,或者在选择使用哪种方法验证对象之前应考虑哪些因素?
Validator.TryValidateObject
将检查属性的 RequiredAttribute
,附加到类型的任何 ValidationAttribute
和 IValidatableObject
的 Validate
方法。
model.Validate
不会检查任何属性。
我见过的大多数使用 IValidatableObject 的示例都使用验证器来验证对象,如下所示:
IEnumerable<ValidationResult> ValidateMyModel(IValidatableObject model){
var validationResults = new List<ValidationResult>();
Validator.TryValidateObject(model, new ValidationContext(model), validationResults);
return validationResults;
}
但我也看到过 IValidatableObject.Validate() 方法是这样使用的:
IEnumerable<ValidationResult> ValidateMyModel(IValidatableObject model){
return model.Validate(new ValidationContext(model));
}
这两种方法之间是否存在任何功能差异,或者在选择使用哪种方法验证对象之前应考虑哪些因素?
Validator.TryValidateObject
将检查属性的 RequiredAttribute
,附加到类型的任何 ValidationAttribute
和 IValidatableObject
的 Validate
方法。
model.Validate
不会检查任何属性。