c# - FluentValidation 规则链接不会在第一次失败时停止

标签 c# fluentvalidation

我有一个模型:

public class DTO
{
    public int[] StatementItems { get; set; }
}

我想验证一下:

  1. StatementItems 不为空
  2. StatementItems 不为空
  3. StatementItems 不包含任何重复的 ID

我创建的验证规则链是:

RuleFor(x => x.StatementItems).NotNull().NotEmpty().Must(x => x.Distinct().Count() == x.Count());

我有一个测试:

_validator.ShouldHaveValidationErrorFor(x => x.StatementItems, null as int[]);

当我运行传递空值的测试时,我预计它会在链的第一条规则 (NotNull()) 上失败并停在那里。但是,它提示 Must() 中使用的 lamda 值为空。

如果 NotNull() 失败,我是否认为不应运行 Must()?如果可以,这个规则应该怎么写?

谢谢

最佳答案

尽管@NPras 的回答确实为我提供了解决方案,但我不喜欢我复制 NotNull 规则这一事实。在对 FluentValidation 进行更多研究后,我使用 DependentRules 实现了它:

RuleFor(x => x.StatementItems).NotNull().NotEmpty()
            .DependentRules(d =>
                d.RuleFor(x => x.StatementItems).Must(x => x.Distinct().Count() == x.Count())
            );

所以现在 Must 条件只有在前两个规则有效时才会触发。

关于c# - FluentValidation 规则链接不会在第一次失败时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100254/

相关文章:

c# - HtmlAgilityPack HtmlWeb.Load 返回空文档

c# - asp.net如何计算时间?

c# - SignalR 无法启动连接

c# - 空对象的 FluentValidation 规则

c# - 如何使用 FluentValidation 验证我的日期时间?字段有好的格式吗?

c# - 具有子类/子类的类的单元测试 FluentValidation 规则

c# - 重新打开子窗体

c# - 具有相等 DateTimeOffset 日期的单元测试返回错误

servicestack - 拦截 Fluent 验证

c# - 找出一个对象是否有一个特定的类作为祖先