私は、DataContracts を API に送信する前に検証を提供する拡張メソッドを作成しました。
拡張方法は次のとおりです。
public static bool IsValid(this object obj, out List<ValidationResult> validations)
{
ValidationContext context = new ValidationContext(obj, null, null);
validations = new List<ValidationResult>();
return Validator.TryValidateObject(obj, context, validations, true);
}
簡潔にするために、検証中のオブジェクトのプロパティを 1 つだけ挙げます。
[Required]
[Display(Name = "X coordinate")]
[Range(-50, 50)]
[DataMember(IsRequired=true)]
public int XCo { get; set; }
このプロパティを 51 に設定して検証すると、true が返されます。
[Required]
[Display(Name = "X coordinate")]
[Range(-50, 50, ErrorMessage="Xco outside accepted range")]
[DataMember(IsRequired=true)]
public int XCo { get; set; }
このプロパティを 51 に設定して検証すると、false が返されます。
null の ErrorMessage を使用しても、ユーザーが指定した文字列プロパティが設定されていないという理由だけで、無効なオブジェクトに対して Validator が true を返すとは思いません。
エラーメッセージのプロパティが設定されていない場合でも、これを適切に検証するように構成する方法があるかどうかは誰にもわかりませんか?
優れたエラー報告は明らかに非常に役立つため、これが必ずしも良い解決策ではないことはわかっていますが、このプロセスはデータ中心にしたいと考えています。