FluentValidation字符串NotNull与NotEmpty

时间:2014-01-29 19:52:43

标签: c# .net string validation fluentvalidation

最初在为字符串编写验证逻辑时,我决定使用NotEmpty来处理所需的任何字符串。当使用.NotEmpty()。Length(min,max)时,这将导致返回两个错误,而不是在传入空字符串时返回一个错误。

如何防止出现冗余错误?

2 个答案:

答案 0 :(得分:41)

.Length(min,max)如果字符串为null,则不会返回错误,但是当字符串为空且min大于0时将返回错误。有两种方法可以实现所需的字符串,最小化长度大于0。

停止第一个错误的典型方法是使用Cascade方法:

    RuleFor(o => o.PropertyName)
        .Cascade(CascadeMode.StopOnFirstFailure)
        .NotEmpty() // Will return an error if null or empty
        .Length(2, 10) // Will only return an error if length == 1 or > than 10

但是对于字符串,更容易阅读以下内容:

    RuleFor(o => o.PropertyName)
        .NotNull()
        .Length(2, 10) // Will not return an error on null

使用NotNull,NotEmpty和Length的字符串验证方案:

可选,最大长度为:

    RuleFor(o => o.PropertyName).Length(0, max);


可选,最小和最大长度:

    RuleFor(o => o.PropertyName).Length(min, max);


必需但长度为零:

    RuleFor(o => o.PropertyName).NotNull()


必填且长度必须为非零:

    RuleFor(o => o.PropertyName).NotEmpty();


必填且有最大长度:

    RuleFor(o => o.PropertyName).NotNull().Length(0, max);


必填且具有最小和最大长度:

    RuleFor(o => o.PropertyName).NotNull().Length(min, max);

答案 1 :(得分:2)

另一种防止发生其他错误的方法是set the cascade mode

RuleFor(x => x.PropName) .Cascade(CascadeMode.StopOnFirstFailure) .NotEmpty() .Length(min, max);