限制在ODATA4更新中发送的属性

时间:2015-12-16 16:14:33

标签: c#-4.0 odata

当我尝试更新对象上的属性(AvaliableQuantity),然后通过ODATA更新它(使用oData v4客户端代码生成器)。问题是当我发送请求时(下面的Fiddler输出)我得到一个错误,说“只有AvailableQuantity可能会被更新”。有没有办法指定哪些属性可以更新(可能是通过属性?)

PATCH https://*****************/v1/DCQuantities(ProductID=33578709,DistributionCenterID=17) HTTP/1.1
OData-Version: 4.0
OData-MaxVersion: 4.0
Content-Type: application/json;odata.metadata=minimal
Accept: application/json;odata.metadata=minimal
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services
Authorization: Bearer ************************
Host: **************
Content-Length: 153
Expect: 100-continue
{"@odata.type":"#ChannelAdvisor.RestApi.V1.Models.DCQuantity","AvailableQuantity":30,"DistributionCenterID":17,"ProductID":33578709,"ProfileID":22001149}

以下是Fiddler的原始回复

HTTP/1.1 400 Bad Request
Content-Length: 88
Content-Type: application/json; odata.metadata=minimal; charset=utf-8
Server: Microsoft-IIS/7.5
OData-Version: 4.0
X-ServerName: **********
Date: Wed, 16 Dec 2015 15:50:52 GMT

{
  "error":{
    "code":"","message":"Only AvailableQuantity may be updated."
  }
}

我能够更新其他对象的属性,因此我知道身份验证(OAUTH2)和基本类正在运行。

有人对我能尝试的东西有任何想法吗?

非常感谢

乔纳森

1 个答案:

答案 0 :(得分:0)

好的,我已经意识到我在这篇文章中做错了什么(http://blogs.msdn.com/b/odatateam/archive/2014/04/10/client-property-tracking-for-patch.aspx)。在更改对象之前,我使用这样的代码来获取对象:

format

我需要做的是将查询结果分配给DataServiceCollection<>()类,然后在跟踪实际更改的内容并为我管理整个更新。

var product = target.Products.Expand("DCQuantities").Where(p => p.Sku == "JRSTEST1").First();
product.First().DCQuantities[0].AvailableQuantity = 42;
target.UpdateObject(product.DCQuantities[0]); 
var result = target.SaveChanges();