これについてはすでにたくさんの質問があることを知っています-どれがバージョンの問題に関連しているか、どれがjQuery(私は使用していません)に関連しているかなどを整理するのに苦労しています. MVC4 RC (4.0.20505.0)、Visual Studio 2010 Ultimate SP1。
モデルに複合型があります。
public HttpResponseMessage Post([FromUri]Person person)
{
TableStorageHelper personHelper = new TableStorageHelper();
personHelper.Save(personHelper.GetTableNameForType("Person"), person);
var response = Request.CreateResponse<Person>(HttpStatusCode.Created, person);
return response;
}
私はこのJSON文字列を渡しています-ほとんどFiddlerを使用していますが、別のコントローラーのコードからも試しています(コントローラーが受け取ったオブジェクトの値を取得できることを確認するためだけに、すべてのテストをローカルで実行しようとしています):
JSON:
{"FirstName":"Andy","LastName":"Schultz","PartitionKey":"USW","RowKey":"per-928c8f74-2efd-4fc2-a71c-fb3ea8acc6d7","NickName":null,"FullName":"Andy Schultz","Description":null,"ImageLocation":null,"Region":"USW","CommentsAboutMe":{"Comments":[]},"CommentsByMe":{"Comments":[]}}
ここにあるすべてのプロパティはクラスに存在します。
他のコントローラーからのコード:
HttpWebRequest request = HttpWebRequest.Create("http://127.0.0.2:8080/api/persons/") as HttpWebRequest;
request.Method = "POST";
request.ContentType = "text/json";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
Person person = new Person("Andy", "Schultz", "USW");
Formatting formatting = new Formatting();
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
string json = JsonConvert.SerializeObject(person, formatting, settings);
writer.Write(json);
}
毎回、コントローラーに空の Person オブジェクトを取得します (最初の行でデバッグしています)。すべての値は NULL です。
私のコントローラーの [FromUri] 属性に気づいたかもしれません - 未定義の型の ModelBinder がないというエラーを回避するためにそれをしなければなりませんでしたが、それが正しいかどうかはわかりません - 私は何も渡していませんご存知のように、情報は Uri にあり、本体にあります。