ASP.NET WebAPIで差分更新する
なんか久しぶりになってしまった(反省
ASP.NET WebAPIで差分更新(?)をする方法です。
ここで言う差分更新は、クライアントから送られてきた項目だけを
更新するという意味の差分更新です。
普通にモデルバインドするとnullだったりデフォルト値がクライアントから送られてきたのか
送られてこなかったからnullなのかが分かりません。
さてどうするのん?って思ってたらちゃんとやり方がありました。
Putメソッドを使っても良いですが最近はどうやら差分更新の時は
Patchメソッドを使うらしいのでそちらを使います。
でもPatchじゃなきゃできないわけじゃないです。
まずモデルクラスはこんな感じ
public class User { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
でクライアントはこんな感じでデータを送るとします
$("#button").on("click", function () { $.ajax({ url: "http://localhost:62434/api/values", dataType: "json", method: "PATCH", contentType: 'application/json', data: JSON.stringify({Id:1, FirstName:"taro"}), }); });
上記の場合は、LastNameが送られてきてないので通常はnullになって更新されてしまいます。
これをちゃんとDBの値と組み合わせてnullにならないようにします。
public void Patch([FromBody]Delta<User> value) { // DBから取得したとする var user = new User { Id = 1, FirstName = "jiro", LastName = "suzuki" }; value.Patch(user); }
Delta
この場合は、FirstNameが"taro"でLastNameは"suzuki"のままです。
もちろんクライアントがFirstNameをnullで送ればそのままnullで更新ができます。
Delta