OData PUT替换集合属性

时间:2017-02-14 19:23:23

标签: odata

使用OData标准是否可以通过发送新集合来替换集合? 场景: person对象包含一个列表Address对象。我想用新的集合替换Address集合。 PUT人员(1)/地址 [{" city":" X"," country":" US"},{" city":& #34; Y"," country":" US"}]

1 个答案:

答案 0 :(得分:0)

开箱即用(至少对于ODATAv3)是不可能的,因为默认路由模板不会期望关键部分之后的段。

但是你应该能够添加一个可以实现你想要的ODATA Action。您的操作定义可能与此类似:

var action = builder.Entity<Person>()
    .Action("Addresses")
    .Returns<bool>();
action.Parameter<Collection<CityCountryPair>>("data");

类型CityCountryPair将是包含您要更改的属性的常规DTO。确保此类型也在Odata中注册为EntitySet,或者使用仅包含基本类型的普通地图/字典。

对ODATA操作的实际调用将类似于:

POST http://www.example.com/api/YourEndpoint/Persons(42)/Addresses
Content-Type: application/json

{
    "data" : 
    [
      { "city" : "Berne" , "country": "CH" },
      { "city" : "Y" , "country": "CH" }
    ]
}    

如果您想发送更复杂的数据类型,您仍然可以求助于客户JSON Deserialiser并覆盖默认数据类型,或者毕竟使用自定义模型绑定器。