FluentValidation 允许 null 或指定长度?

FluentValidation allow null OR specify length?

我有这样的规则:

RuleFor(m => m.Title).Length(1, 75);

但是,如果标题为空,我仍然得到验证,说明标题长度必须在 1 到 75 个字符之间,您输入了 0。

我如何更改规则以允许空标题,但如果指定了一个,则它必须介于 1 到 75 个字符之间?谢谢

我在这里做了一些假设,但我猜你的标题没有设置为 null,而是设置为 string.Empty。您可以通过执行以下操作向任何规则添加特定条款:

public class Thing
{
    public string Title { get; set; }
}

public class ThingValidator : AbstractValidator<Thing>
{
    public ThingValidator()
    {
        this.RuleFor(s => s.Title).Length(1, 75).When(s => !string.IsNullOrEmpty(s.Title));
    }
}

正如 Yannick Meeus 在上面 post 中所建议的,我们需要添加 'When' 条件来检查非空。 它解决了这个问题。 在这里我想允许 Phone 数字为空,但如果指定则它应该只包含数字。

RuleFor(x => x.PhoneNumber).Must(IsAllDigits).When(x => !string.IsNullOrEmpty(x.AlternateNumber)).WithMessage("PhoneNumber should contain only digits");