最初在为字符串编写验证逻辑时,我决定使用NotEmpty来处理所需的任何字符串。当使用.NotEmpty()。Length(min,max)时,这将导致返回两个错误,而不是在传入空字符串时返回一个错误。
如何防止出现冗余错误?
答案 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);