模型验证不适用于派生类。即使我提到了已知的类型

时间:2019-04-01 10:28:58

标签: asp.net-core-2.0 model-validation known-types

我正在使用asp.net core 2.2和模型验证进行服务器端验证。 除已知类型外,它的工作情况都很好。

这是我的课程结构

    //Main Class

    [DataContract]    
    [KnownType(typeof(SubClass2))]    
    [KnownType(typeof(SubClass1))]    
    public partial class MainCass : Base    
    {     
    //properties comes here     
    }     

    //Sub Classes    

    [DataContract]     
    public partial class SubClass1 : MainCass    
    {    
    //properties comes here    
    }    

    [DataContract]    
    public partial class SubClass2 : MainCass    
    {    

    [DataMember]    
    [CustomRequired(ErrorMessageResourceType = typeof(ErrorMessages),  
    ErrorMessageResourceName = "FieldRequired", Caption = "name required")]    
    public string Name  {get; set; }   

    }    

//this is my request model
    [DataContract]    
    public partial class request:Base    
    {    
    [DataMember]    
    public List<MainCass> MainCassList  {get; set; }    
    }    

现在未调用SubClass2中Name的验证属性。 我从用户界面发送Subclass2类型。

1 个答案:

答案 0 :(得分:0)

模型绑定器不支持多态。它创建模型和所有相关子模型的文字类型。然后,它尝试将请求主体绑定到这些类型。它不会推断派生类型。

换句话说,这听起来像是在SubClass1属性中发送SubClass2MainClassList的实例。但是,模型绑定器将所有这些创建为MainClass,因为这是定义的类型。特定于SubClass1SubClass2的所有已发布数据都将被丢弃,最后,您拥有的只是MainClass的实例。因此,由于您没有SubClass1SubClass2的实例,因此当然不会在SubClass1SubClass2上运行任何特定的验证。