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

使用FluentValidation验证数值范围失效,求有效解决方法

问题描述

使用FluentValidation验证字段时,某字段的范围验证(自定义Must方法或内置InclusiveBetween)完全失效,断点调试发现验证步骤被直接跳过。

最后尝试的代码:

public override bool IsValid()
{
  InlineValidator<CreateFunctionCommand> validator = new();

  validator.RuleFor(validateField => validateField.HourlyRate)
   .Must(HourlyRateValidation)
   .WithErrorCode(GlobalizationConstants.BASIC0001)
   .WithMessage(GlobalizationConstants.BASIC0001.Resource());


  return base.IsValid();
}

private bool HourlyRateValidation(int hourlyRate)
{
  return hourlyRate >= 10 && hourlyRate <= 100;
}
问题根源

你创建了InlineValidator实例并定义了规则,但从未执行这个验证器的验证逻辑,直接返回了base.IsValid(),导致自定义规则完全没被触发。

可行解决方案

方案1:正确执行InlineValidator的验证

在IsValid方法中,需要调用validator.Validate获取验证结果,再和基类的验证结果合并:

public override bool IsValid()
{
  var baseResult = base.IsValid();
  if (!baseResult) return false;

  var inlineValidator = new InlineValidator<CreateFunctionCommand>();
  inlineValidator.RuleFor(x => x.HourlyRate)
    .InclusiveBetween(10, 100) // 直接用内置方法更简洁
    .WithErrorCode(GlobalizationConstants.BASIC0001)
    .WithMessage(GlobalizationConstants.BASIC0001.Resource());

  var inlineResult = inlineValidator.Validate(this); // 传入当前实体实例
  if (!inlineResult.IsValid)
  {
    // 将验证错误添加到当前验证器的错误集合中
    foreach (var error in inlineResult.Errors)
    {
      this.Errors.Add(error);
    }
    return false;
  }

  return true;
}

方案2:规范使用AbstractValidator(推荐)

如果你的类继承自AbstractValidator<CreateFunctionCommand>,不要重写IsValid方法,直接在构造函数中定义规则才是FluentValidation的标准用法:

public class CreateFunctionCommandValidator : AbstractValidator<CreateFunctionCommand>
{
  public CreateFunctionCommandValidator()
  {
    // 其他字段验证规则...

    RuleFor(x => x.HourlyRate)
      .InclusiveBetween(10, 100)
      .WithErrorCode(GlobalizationConstants.BASIC0001)
      .WithMessage(GlobalizationConstants.BASIC0001.Resource());
  }
}

这种方式下,FluentValidation会自动执行所有定义的规则,不会出现规则被跳过的问题。


内容的提问来源于stack exchange,提问作者jvbs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:42:10