我正在使用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"
}]
}
提前致谢。
答案 0 :(得分:0)
经过大量搜索后,我发现没有其他方法可以手动触发验证,如本链接所述