试图利用System.Web.Http.OData.Delta在 ASP.NET Web API 服务中实现PATCH方法,但似乎无法将更改应用于 type 的属性IEnumerable<T>
。我正在使用 Delta 的最新 Git 版本(2012.2-rc-76-g8a73abe)。有没有人能够完成这项工作?
考虑这种数据类型,它应该可以在对 Web API 服务的 PATCH 请求中更新:
public class Person
{
HashSet<int> _friends = new HashSet<int>();
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public IEnumerable<int> Friends
{
get { return _friends; }
set
{
_friends = value != null ? new HashSet<int>(value) : new HashSet<int>();
}
}
public Person(int id, string firstName, string lastName)
{
Id = id;
FirstName = firstName;
LastName = lastName;
}
public Person()
{
}
}
此 Web API 方法通过以下方式实现对 Person 的修补Delta<Person>
:
public void Patch(int id, Delta<Person> delta)
{
var person = _persons.Single(p => p.Id == id);
delta.Patch(person);
}
如果我向服务发送带有以下 JSON 的 PATCH 请求,Friends
则应更新此人的属性,但可惜不会发生:
{"Friends": [1]}
问题的关键在于如何Friends
用这些数据让 Delta 更新。另请参阅CodePlex 上的讨论。