【发布时间】:2016-05-14 05:25:58
【问题描述】:
我有两个模型:Child 和 Location。他们有关系。这是位置的样子:
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; }
}
`
Child 模型沿着这些思路(FirstName、LastName 等)查找,并且引用了 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 从移动设备发布数据时,理想情况下,我希望传递 Child 的 ID 值而不是整个 Child 对象。但是,每次检查传入的Location 对象时,child 属性都会设置为null。我尝试了以下 JSON:
{
"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 中获得的内容),但子对象仍设置为 null。
我对 ASP.NET 尤其是 Web API 还是很陌生,因此我将不胜感激。如何指示 WebAPI 至少解析 Child 对象的 ID 部分?
我知道从技术上讲,我可以通过向 Location 模型添加另一个属性 int ChildId 来解决这个问题 - 但我想知道是否有更优雅的解决方案(有很多模型与 Child 相关联)。
谢谢!
【问题讨论】:
-
我看到您使用的是复杂类型(位置)。尝试将 FromBody 更改为 FromUri。如果它不起作用,请尝试将其删除。今天早些时候,当我发布的 JSON 对象为空时,我遇到了这个问题。参数绑定参考asp.net/web-api/overview/formats-and-model-binding/…
-
从
Child属性中删除[JsonIgnore]。但是由于您只发布了Child的一个属性,因此您应该创建一个仅包含您需要的那些属性的视图模型(并且它将具有属性int ChildId而不是Child Child)
标签: asp.net asp.net-mvc asp.net-web-api json.net