静的コードではなくデータ ストアから検証属性を設定できるように、カスタム プロバイダーをセットアップしました。私の .NET MVC 4 プロジェクトのクライアント側の検証ではうまく機能しますが、サーバー側の検証を機能させることができません。
CustomModelValidatorProvider.cs:
public class CustomModelValidatorProvider : DataAnnotationsModelValidatorProvider { protected override IEnumerable GetValidators (ModelMetadata メタデータ、ControllerContext コンテキスト、IEnumerable 属性) { // ここでデータストアから属性を設定します base.GetValidators(メタデータ、コンテキスト、属性) を返します。 } }
私の Global.asax.cs には次のものがあります。
保護された void Application_Start() { ModelValidatorProviders.Providers.Clear(); ModelValidatorProviders.Providers.Add(新しい CustomModelValidatorProvider()); }
そして、私が持っているWeb APIメソッドで:
var validationResultList = new List(); bool valid = Validator.TryValidateObject(myModelObject, new ValidationContext(myModelObject, null, null), validationResultList, true);
ここで、valid は常に true です。Jquery クライアント側の検証でエラーが表示された場合でも。サーバー側では、データ注釈の適用にカスタム プロバイダーが使用されていません。GetValidators() にブレークポイントを設定すると、ビューが作成されたときに呼び出され、クライアント側のバリデーターが正しく表示されますが、モデルがコントローラーにバインドされたときに再度呼び出されることはありません。
私は一歩を踏み外しましたか?どんな助けでも大歓迎です!
アップデート
カスタム バリデータは、オブジェクトがコントローラーにポストされると正しく機能しますが、ApiController にポストされると起動しません。