Web API Custom ModelBinder必需的子对象

时间:2014-03-31 12:04:09

标签: asp.net-web-api data-annotations model-binding

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

[DataAnnotation Required]在我的父对象上运行良好, 但是当子对象中的[required]属性丢失时,它无法正常工作。

在我的模型样本

下面

在下面发布的数据中,当我尝试使用以下请求(错过了子对象设备中的DeviceName)插入表[Users]时,[Devices]未针对数据注释进行验证。这意味着我没有在ModelState中出现错误,表明需要DeviceName字段。 注意:User对象是模型绑定,验证工作正常。

自定义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; }
}

控制器:

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"
        }]
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

经过大量搜索后,我发现没有其他方法可以手动触发验证,如本链接所述

http://www.tsjensen.com/blog/post/2011/12/23/Custom+Recursive+Model+Validation+In+NET+Using+Data+Annotations.aspx