Asp.net web api Web API自定义ModelBinder所需的子对象

Asp.net web api Web API自定义ModelBinder所需的子对象,asp.net-web-api,data-annotations,model-binding,Asp.net Web Api,Data Annotations,Model Binding,我正在使用ASP.NET Web API 2,我正在尝试从我的请求中验证这个子对象 [DataAnnotation Required]在我的父对象上运行良好, 但当子对象中缺少[required]属性时,它将不起作用 下面是我的模型示例 在下面发布的数据中,当我尝试使用下面的请求在表[Users]中插入时(子对象设备中缺少DeviceName),不会根据数据注释验证[Devices]。这意味着ModelState中没有错误,表明DeviceName字段是必需的。 注意:用户对象是模型绑定,验证工

我正在使用ASP.NET Web API 2,我正在尝试从我的请求中验证这个子对象

[DataAnnotation Required]在我的父对象上运行良好, 但当子对象中缺少[required]属性时,它将不起作用

下面是我的模型示例

在下面发布的数据中,当我尝试使用下面的请求在表[Users]中插入时(子对象设备中缺少DeviceName),不会根据数据注释验证[Devices]。这意味着ModelState中没有错误,表明DeviceName字段是必需的。 注意:用户对象是模型绑定,验证工作正常

此外,自定义ModelBinder未被激发

型号:

[Serializable]
[Table("Users")]
public partial class Users
{
    [Key]
    [Column("ID")]
    public int ID { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Column("UserName")]
    public string UserName { get; set; }

    public virtual ICollection<UserDevice> UserDevices { get; set; }
}

[Serializable]
[Table("Users_Devices")]
public partial class UserDevice
{
    [Key]
    [Column("ID")]
    public int ID { get; set; }

    [Column("DeviceName")]
    [DataType(DataType.Text)]
    [Required]
    public string DeviceName { get; set; }

    [Column("DeviceDescription")]
    [DataType(DataType.Text)]
    [Required]
    public string DeviceName { get; set; }

    [Column("UserID", TypeName = "int")]
    public int UserID { get; set; }
    [ForeignKey("UserID")]
    public virtual Users User { get; set; }
}

提前感谢。

经过大量搜索,我发现除了按此链接中所述手动启动验证之外,没有其他方法


我不清楚你在问什么。你说的是部门,但我在你的代码中根本看不到。你的问题是什么?我编辑了子类名。请求的post数据包含一个子对象(设备),不会触发(设备)实体的验证,因为[DeviceName]在需要时不存在。问题是:我希望在提交所提到的请求主体时验证(设备)。
public async Task<IHttpActionResult> Post([ModelBinder(typeof(APIUsersModelBinder))] Users user)
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        _db.Users.Add(user);
        await _db.SaveChangesAsync();

        return Created(user);
    }
{
    "UserName":"TestUser",
     "Devices":
        [{
            "DeviceDescription":"Description"
        }]
}