2

Validator.TryValidateObject()データ注釈を使用するオブジェクトを検証するために使用しています。オブジェクトが無効な場合、コードは正常に実行されます。ただし、有効な場合は、stackoverflowエラーが発生します。

これが私の方法です:

public virtual IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
    vc = new ValidationContext(this, null, null);
    List<ValidationResult> a = new List<ValidationResult>();

    Validator.TryValidateObject(this, vc, a,true);

    foreach (var item in a)
        yield return item;

    if (Name == "Arbitary")
        yield return new ValidationResult("Bad Name.", new[] { "Name" });

}

TryValidateObject内部的にも私のメソッドを呼び出しているようですValidate

このメソッドの目標は、オブジェクトのすべてのDataAnnotationsを検証し、その後、複雑な検証ロジックを追加することです。そのためTryValidateObject、データアノテーションをチェックすると想定し、その後、独自の検証ロジックを配置できます。

現状では、私のメソッドはデータが無効な場合に機能します。DataAnnotationsから生成されたValidationResultsを報告し、名前が「Arbitary」の場合はValidationResultも追加しますが、データが有効な場合はこのスタックオーバーフローが発生します。

何か案は?自分のValidateメソッドが呼び出されないように、オブジェクトのデータアノテーションを検証するにはどうすればよいですか?または、このスタックオーバーフローを解決するにはどうすればよいですか?

私のクラスはIValidatableObjectインターフェースを実装していることに注意してください。

4

1 に答える 1

2

このSOの質問のように、Validateから継承するのではなく、独自のデータ注釈属性を実装してカスタム検証を実行できますか?

カスタムデータアノテーションバリデーターを作成する方法

于 2012-04-12T15:26:31.887 に答える