8

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つ以上のフィールドの部分的な更新を送信するにはどうすればよいですか?更新されたフィールドのみをサーバーに送信し、そこからそれらのフィールドのみをデータベースに更新します。私は確かに更新する前にデータベースにクエリを実行したくありません。

4

2 に答える 2

-3

データベースから元のオブジェクトをクエリし、そのプロパティを設定して、_db.SaveChange()を呼び出す必要があります。

public HttpResponseMessage Put(Todo todo){
var item = _db.Todo.First(i => i.id = todo.id);
item.Content = todo.Content;
item.Done = todo.Done;
_db.SaveChanges();
return new HttpResponseMessage<Todo>(HttpStatusCode.Accepted);
}

参照:http://msdn.microsoft.com/en-us/library/dd456854.aspx

于 2012-04-25T22:34:10.420 に答える