web-dev-qa-db-ja.com

FluentValidation文字列NotNullとNotEmpty

もともと文字列の検証ロジックを作成するとき、必要な文字列にはNotEmptyを使用することにしました。 .NotEmpty()。Length(min、max)を使用すると、空の文字列が渡されたときに1つだけではなく2つのエラーが返されます。

冗長なエラーを防ぐにはどうすればよいですか?

21
Brett Allen

.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、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);
42
Brett Allen

追加のエラーの発生を防ぐ別の方法は、 カスケードモードを設定する にすることです。

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

3
bschreck