最新のでは、安定した Web APIのリリース(2012年8月以降)はサポートされていません。だから、あなたが使いたいものがWeb API RTMであれば、配管全体を自分で実装する必要があります。
ODataプレリリースパッケージは、新しいDelta<T>
オブジェクトを通じて部分的な更新を非常にうまくサポートしています。 現在Microsoft.AspNet.WebApi.ODataパッケージは、RC版すでに(0.3)であり、ここから入手することができます:http://www.nuget.org/packages/Microsoft.AspNet.WebApi.OData
あなたがそれをインストールしたら、あなたはそれに応じてそれを使用することができます
[AcceptVerbs("PATCH")]
public void Patch(int id, Delta<Person> person)
{
var personFromDb = _personRepository.Get(id);
person.Patch(personFromDb);
_personRepository.Save();
}
をそして、あなたはこのように、クライアントからそれを呼びたい:
$.ajax({
url: 'api/person/1',
type: 'PATCH',
data: JSON.stringify(obj),
dataType: 'json',
contentType: 'application/json',
success: function(callback) {
//handle errors, do stuff yada yada yada
}
});
本の明白な利点は、それが任意のプロパティのために働くということです、そしてあなたがEmail
やを更新するかどうかを気にする必要はありません10など。
、それは非常によく似た手法http://techbrij.com/http-patch-request-asp-net-webapi
EDIT(詳細)を示してます。また、この記事に見たいと思うかもしれません:するためには はちょうどPATCHを使用するには、有効にする必要はありませんODataパッケージの追加を除いて、ODataに関連するもの - Delta<TEntityType>
オブジェクトへのアクセスを取得します。あなたはこれを行うことができます
:あなたの項目がある場合は
public class ValuesController : ApiController
{
private static List<Item> items = new List<Item> {new Item {Id = 1, Age = 1, Name = "Abc"}, new Item {Id = 2, Age = 10, Name = "Def"}, new Item {Id = 3, Age = 100, Name = "Ghj"}};
public Item Get(int id)
{
return items.Find(i => i.Id == id);
}
[AcceptVerbs("PATCH")]
public void Patch(int id, Delta<Item> item)
{
var itemDb = items.Find(i => i.Id == id);
item.Patch(itemDb);
}
}
を、のは言わせて:
{
"Id": 3,
"Name": "hello",
"Age": 100
}
あなたがして/api/values/3
にパッチすることができます
{
"Name": "changed!"
}
、それは正しくましますオブジェクトを更新します。
Delta<TEntity>
あなたの変更を追跡します。これは、あなたのタイプの軽量プロキシとして機能し、元のオブジェクト(つまり、DB)とクライアントが渡したオブジェクトの違いを理解する動的クラスです。
これは他のAPIには何ら影響しません(ただし、ODataパッケージの依存性を促進するためにDLLを新しいものに置き換えることは除きます)。
私はPATCH + Deltaの仕事を実証するためのサンプルプロジェクトを追加しました。ここでそれを取得できます。s VS2012)https://www.dropbox.com/s/hq7wt3a2w84egbh/MvcApplication3.zip
HTTP 'PATCH'それは – TheWhiteRabbit