WebAPIとdbContextを使用してasp.netmvc3で簡単なtodoリストアプリケーションを作成しました。(バックボーンとクライアント用のrequirejsを使用)すべてが正常に機能しますが、todoアイテムをオンまたはオフにした場合、モデル全体をサーバーに送信する必要があるという事実に悩まされています。データを送信するときに「完了」フィールドのみを送信したいと思います。
また、JsonNetFormatterを使用してJSON.NETをデフォルトのシリアライザーとして使用していることにも言及する必要があります(ここで説明:http://blogs.msdn.com/b/henrikn/archive/2012/02/18/using-json- net-with-asp-net-web-api.aspx)。
現在、これはモデルを更新するための私のAPIコントローラーメソッドです
public HttpResponseMessage Put(Todo todo)
{
_db.Entry(todo).State = EntityState.Modified;
_db.SaveChanges();
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
これをjsonデータとして受け取ります
{"content":"Pick up milk","done":false,"id":10}
もちろんこれは機能しますが、モデル全体を更新しているため、1つのフィールドのみを更新する必要があります。変更されたフィールドをブラウザーからサーバーに送信することしかできませんが、WebAPIメソッドがどのようになるかわかりません。FormCollectionで何かをすることを考えていましたが、送信されたフォーム値を直接FormCollectionタイプにシリアル化しようとしているように見えるため、これはWebAPIでは機能しないようです。このエラーが発生します。
Cannot deserialize JSON object (i.e. {"name":"value"}) into type 'System.Web.Mvc.FormCollection'.
モデルからWebAPIに1つ以上のフィールドの部分的な更新を送信するにはどうすればよいですか?更新されたフィールドのみをサーバーに送信し、そこからそれらのフィールドのみをデータベースに更新します。私は確かに更新する前にデータベースにクエリを実行したくありません。