使用IvalidatableObject
掌握条件属性验证
接口是用于综合对象验证的强大工具,对于验证具有期间依赖性的复杂对象特别有用。 该接口允许验证取决于同一对象中其他属性的值。 但是,将其与单个属性验证属性(例如或IValidatableObject
)相结合需要仔细考虑。
[Required]
[Range]
方法提供了执行这些条件检查的机制。 假设您只有在
>和IValidatableObject.Validate()
。 您将如何实现此处:Prop1
Prop2
至关重要的是,当使用Enable
>时,将
<code class="language-csharp">public class ValidateMe : IValidatableObject { [Required] public bool Enable { get; set; } [Range(1, 5)] public int Prop1 { get; set; } [Range(1, 5)] public int Prop2 { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (!Enable) { return Enumerable.Empty<ValidationResult>(); } var validationResults = new List<ValidationResult>(); // Add conditional validation rules here. For example: if (Prop1 < 1 || Prop1 > 5) { validationResults.Add(new ValidationResult("Prop1 must be between 1 and 5", new[] { nameof(Prop1) })); } if (Prop2 < 1 || Prop2 > 5) { validationResults.Add(new ValidationResult("Prop2 must be between 1 and 5", new[] { nameof(Prop2) })); } return validationResults; } }</code>
> Validator.TryValidateObject()
的属性的属性,从而确保您的条件逻辑在validateAllProperties
>中优先。 这允许在单个财产验证与有条件的,交叉特性验证之间进行干净的关注点。
以上是如何使用IvalidatableObject执行条件性属性验证?的详细内容。更多信息请关注PHP中文网其他相关文章!