Проверка модели не работает для производных классов. хотя я упомянул известные типы - PullRequest
0 голосов
/ 01 апреля 2019

Я использую 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; }    
    }    

теперь атрибут проверки Name в SubClass2 не вызывается. Из интерфейса я отправляю тип Subclass2.

1 Ответ

0 голосов
/ 01 апреля 2019

Связующее модели не поддерживает полиморфизм. Он создает буквальный тип (типы) модели и любые связанные с ней подмодели. Затем он пытается привязать тело запроса к этим типам. Он не будет выводить производные типы.

Другими словами, похоже, что вы отправляете экземпляры SubClass1 и SubClass2 как часть вашего свойства MainClassList. Однако связыватель модели собирается создать все это как MainClass, потому что это тип, который определен. Любые опубликованные данные, относящиеся к SubClass1 или SubClass2, будут просто отброшены, и, в конце концов, все, что у вас есть, это экземпляры MainClass. Таким образом, конечно, никакой конкретной проверки на SubClass1 или SubClass2 не выполняется, поскольку у вас нет экземпляров SubClass1 или SubClass2.

...