使用JSON和Web API的POST请求?

时间:2016-05-14 05:25:58

标签: asp.net asp.net-mvc asp.net-web-api json.net

我有两个模型:儿童和位置。他们有一段感情。这就是位置的样子:

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添加另一个属性来解决这个问题 - 但我想知道是否有更优雅的解决方案(有很多模型与{{1}相关联})。

谢谢!

1 个答案:

答案 0 :(得分:0)

将Child的属性名称更改为其他名称。例如

public virtual Child ChildProp { get; set; }

你的Json数据:

{
"Latitude": 43.63434,
"Longitude": -92.12345,
"Accuracy": 13,
"ReportTime": "2016-05-11T23:29:30.87",
"ChildProp": {
    "Id": 3
    }
}