Строка FluentValidation NotNull против NotEmpty

Первоначально при написании логики проверки для строк я решил использовать NotEmpty для любой требуемой строки. При использовании .NotEmpty(). Length (min, max) это приведет к возврату двух ошибок вместо одного, когда пустая строка будет передана.

Как избежать избыточных ошибок?

Ответ 1

.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);