You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:02:13