0
我有两个模型:儿童和位置。他们有关系。这是什么地方的样子:使用JSON和Web API的POST请求?
public class Location {
[Key]
public int Id { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public float Accuracy { get; set; }
public DateTime ReportTime { get; set; }
[JsonIgnore]
public virtual Child Child { get; set; }
}
`
子模型沿着这些线路(名字,姓氏等)的外观和有ICollection<Location> Locations
参考。
我的控制器看起来像这样:
[ResponseType(typeof(Location))]
public IHttpActionResult PostLocation([FromBody] Location location)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Locations.Add(location);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = location.Id }, location);
}
投递使用JSON从移动设备的数据,理想我想通过孩子的ID值,而不是整个子对象的。但是,每次检查传入的Location
对象时,child
属性都设置为null
。我曾尝试以下JSONs:
{
"Latitude": 43.63434,
"Longitude": -92.12345,
"Accuracy": 13,
"ReportTime": "2016-05-11T23:29:30.87",
"Child": {
"Id": 3
}
}
和
{
"Latitude": 43.63434,
"Longitude": -92.12345,
"Accuracy": 13,
"ReportTime": "2016-05-11T23:29:30.87",
"Child": 3
}
我甚至试图通过整个Child
对象(复制/粘贴我从我自己的细节得到了GET ApiController),但孩子仍然设置为空。
我对ASP.NET很新,尤其是Web API,所以我很感激任何帮助。我如何指示WebAPI至少解析Child对象的ID部分?
我知道技术上我可以通过向位置模型添加另一个属性来解决此问题,int ChildId
- 但我想知道是否有更优雅的解决方案(有很多与Child
相关的模型)。
谢谢!
我看你使用的是复合类型(位置)。尝试将FromBody更改为FromUri。如果它不起作用,请尝试删除它。今天早些时候,当我发布的JSON对象为空时,我有这个问题。参考param绑定http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api –
删除'[JsonIgnore]''儿童的财产。但是因为你只发布了一个'Child'的属性,你应该创建一个只包含你需要的属性的视图模型(并且它的属性是'int ChildId'而不是'Child Child') –