次の方法で共有


MVC: ObjectModelValidator が ValidationVisitor.Validate の新しいオーバーロードを呼び出す

ASP.NET Core 5.0 では、 ValidationVisitor.Validate のオーバーロードが追加されました。 新しいオーバーロードは、プロパティを含む最上位レベルのモデル インスタンスを受け入れます。

  bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel);
+ bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container);

ObjectModelValidator は、検証を実行するために、 ValidationVisitor のこの新しいオーバーロードを呼び出します。 この新しいオーバーロードは、検証ライブラリが Core MVC のモデル検証システム ASP.NET 統合されている場合に関係します。

詳細については、GitHub の 問題 dotnet/aspnetcore#26020 を参照してください。

導入されたバージョン

5.0

以前の動作

ObjectModelValidator は、モデルの検証中に次のオーバーロードを呼び出します。

ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel)

新しい動作

ObjectModelValidator は、モデルの検証中に次のオーバーロードを呼び出します。

ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)

変更の理由

この変更は、他のプロパティの検査に依存する検証コントロール ( CompareAttribute など) をサポートするために導入されました。

ObjectModelValidatorに依存してValidationVisitorの既存のオーバーロードを呼び出す検証フレームワークは、.NET 5 以降を対象とする場合に新しいメソッドをオーバーライドする必要があります。

public class MyCustomValidationVisitor : ValidationVisitor
{
+  public override bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
+  {
+    ...
}

影響を受ける API

ValidationVisitor.Validate