Строка FluentValidation NotNull против NotEmpty
первоначально при написании логики проверки для строк я решил использовать NotEmpty для любой строки, которая была необходима. При использовании. NotEmpty().Length (min, max) это приведет к возвращению двух ошибок вместо одной при передаче пустой строки.
Как можно предотвратить избыточные ошибки?
2 ответов
.Length (min, max) не вернет ошибку, если строка имеет значение null, но вернет ошибку, если строка пуста, а min больше 0. Существует два способа реализации требуемой строки с минимальной длиной больше 0.
типичный способ остановиться на первой ошибке - использовать каскадный метод:
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 и длина:
опционный с максимальной длиной:
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);
другой способ предотвратить возникновение дополнительных ошибок - это установить каскадный режим.
RuleFor(x => x.PropName)
.Cascade(CascadeMode.StopOnFirstFailure)
.NotEmpty()
.Length(min, max);