2016-05-14 7 views
0

私は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に関連付けられているモデルがかなりあります)。

ありがとうございました!

+0

public virtual Child ChildProp { get; set; } 

そして、あなたのJSONデータ。 FromBodyをFromUriに変更してみてください。動作しない場合は、取り外してください。今日私はこの問題をJSONオブジェクトがPOSTされたときにnullにしました。 paramバインディングに関する参照http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api –

+1

'[JsonIgnore]'を '子どもの財産です。しかし、あなたの唯一の 'Child'プロパティを投稿してから、必要なプロパティだけを含むビューモデルを作成してください(' Child Child'ではなく 'int ChildId'プロパティがあります) –

答えて

0

子のプロパティ名を他の名前に変更します。例えば。私はあなたが複合型(場所)を使用している参照

{ 
"Latitude": 43.63434, 
"Longitude": -92.12345, 
"Accuracy": 13, 
"ReportTime": "2016-05-11T23:29:30.87", 
"ChildProp": { 
    "Id": 3 
    } 
} 
関連する問題