私は2つのモデルを持っています:子供と場所。彼らには関係があります。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
オブジェクト(私は私自身の詳細から得たもののコピー/貼り付けがApiControllerをGET)が、子を渡すために試してみましたそれでもnullに設定されています。
私はASP.NETと特にWeb APIにはかなり慣れているので、何か助けていただければ幸いです。少なくとも、ChildオブジェクトのID部分を解析するようWebAPIに指示することはできますか?
ロケーションモデルに別のプロパティを追加することで技術的に解決できることが分かりました。int ChildId
- より洗練されたソリューションがあるかどうかは疑問でした(Child
に関連付けられているモデルがかなりあります)。
ありがとうございました!
:
そして、あなたのJSONデータ。 FromBodyをFromUriに変更してみてください。動作しない場合は、取り外してください。今日私はこの問題をJSONオブジェクトがPOSTされたときにnullにしました。 paramバインディングに関する参照http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api –
'[JsonIgnore]'を '子どもの財産です。しかし、あなたの唯一の 'Child'プロパティを投稿してから、必要なプロパティだけを含むビューモデルを作成してください(' Child Child'ではなく 'int ChildId'プロパティがあります) –