Fluent Validation:布尔字段必填校验未触发预期错误提示
问题原因与解决方案
为什么NotNull()校验不生效?
C#中的bool是值类型,默认值为false,永远不会是null。你配置的NotNull()规则仅针对字段为null的场景,因此不会触发错误提示。另外,你添加的Must(x => x == false || x == true)规则完全多余——bool类型本身只能取true或false,这个校验永远会通过。
解决方法
方案1:改用可空布尔类型(推荐)
将Bond类中的isContinuous字段改为bool?(可空布尔类型),这样字段未被赋值时会是null,NotNull()规则就能正常触发:
public class Bond { public bool? isContinuous { get; set; } } public class BondValidator : AbstractValidator<Bond> { public BondValidator() { RuleFor(model => model.isContinuous) .NotNull() .WithMessage("'is Continuous' is required field."); } }
方案2:保留值类型,自定义校验(适用于必须用bool的场景)
如果必须使用bool值类型,由于无法区分“未传值”和“传了false”,若要强制前端显式传递该字段,可结合校验上下文做自定义判断(比如检查字段是否被修改过),但这种方式复杂度较高,不如可空类型直接有效。
内容的提问来源于stack exchange,提问作者Raghava Akula
相关产品推荐
相关产品推荐

