使用FluentValidation校验同一模型中两个属性的大小关系
实现方案
你可以通过FluentValidation的跨属性校验能力实现该需求,有两种常用实现方式:
方式1:使用内置比较规则(推荐)
直接调用GreaterThanOrEqualTo方法传入关联属性即可,写法简洁可读性高,完整校验类代码如下:
public class DocPropertyValidator: AbstractValidator<DocProperty> { public DocPropertyValidator() { RuleFor(a => a.Size).Must(x => x < 1).WithMessage("Invalid Size!"); RuleFor(a => a.Volume).Must(x => x < 1).WithMessage("Invalid Volume!"); // 新增跨字段校验规则 RuleFor(a => a.Volume) .GreaterThanOrEqualTo(a => a.Size) .WithMessage("Invalid case, volume cannot be less then Size."); } }
方式2:使用Must重载实现自定义逻辑
如果后续需要扩展更复杂的判断逻辑,可以使用Must的重载方法直接访问当前校验的模型实例,新增规则代码如下:
RuleFor(a => a.Volume) .Must((model, volume) => volume >= model.Size) .WithMessage("Invalid case, volume cannot be less then Size.");
两种方式效果完全一致,无性能差异。
内容的提问来源于stack exchange,提问作者user1765862
相关产品推荐
相关产品推荐

