web apiとdbContextを使用してasp.net mvc 3で単純なtodoリストアプリケーションを作成しました。 (バックボーンとクライアントのためのrequirejs) すべてうまく動作しますが、私は、完了したようにtodo項目をチェックするかチェックを外すと、モデル全体をサーバに送信しなければならないという事実に悩まされます。 データを送信する際に「完了」フィールドのみを送信したいと思います。asp.net web apiで部分的に更新
私はJSON.NETをデフォルトのシリアライザとして使用するためにJsonNetFormatterを使用していることに言及する必要があります(ここで説明します:http://blogs.msdn.com/b/henrikn/archive/2012/02/18/using-json-net-with-asp-net-web-api.aspx)。
現在、このモデルに
public HttpResponseMessage Put(Todo todo)
{
_db.Entry(todo).State = EntityState.Modified;
_db.SaveChanges();
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
を更新するために、私のAPIコントローラ方式であることがコースオフ、これは動作しますが、それはモデル全体を更新している
{"content":"Pick up milk","done":false,"id":10}
JSONデータとしてこれを取る、それがなければなりません1フィールドのみを更新します。 変更されたフィールドだけをブラウザからサーバーに送信することはできますが、Web APIメソッドの外観はわかりません。 私はFormCollectionで何かをすることを考えていましたが、提出されたformvaluesをFormCollectionタイプに直接シリアル化しようとしているように見えるため、Web APIで動作しないようです。
Cannot deserialize JSON object (i.e. {"name":"value"}) into type 'System.Web.Mvc.FormCollection'.
モデルからWeb APIに1つ以上のフィールドの部分的な更新を送信するにはどうすればよいですか? 私は、更新されたフィールドをサーバーに送信するだけで、そのフィールドをデータベースに更新するだけです。私は確かに更新する前にデータベースを照会したくない。
これには販売されていません。フィールドをnullに設定するとどうなりますか? –
null値が送信者によって設定されたのか、フィールドが省略されただけで設定されたのかを知ることはできません。この場合は、代わりにPATCH動詞を使用することをお勧めします。 – elolos