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') –