次の方法で共有


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 の新しいオーバーロードを呼び出します。 この新しいオーバーロードは、検証ライブラリが ASP.NET Core MVC のモデル検証システムと統合されている場合に関連します。

ディスカッションについては、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 などの検証コントロールをサポートするために導入されました。

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

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

影響を受ける API

ValidationVisitor.Validate