我一直在寻找以下问题的答案,但到目前为止还没有找到答案。
EntitySetController
)是否支持开箱即用?我想到的场景如下所示。您有一个Parent
对象,其中包含多个Child
个对象。你可以用这样的身体做一个POST吗?
{ "Property1" : "Property value", "Property2" : 100
"Children" : [
{ "ChildProperty" : "Some value" },
{ "ChildProperty" : "Some other value" },
{ "ChildProperty" : "Some third value" }
]
}
此外,如果我后来想通过POST一个孩子将另一个孩子添加到Parent
对象,是否有标准化的方法将它们链接在一起?像
{ "ChildProperty" : "Fourth child property val", "Parent" : 321 }
其中'321'是父对象的ID?
非常感谢任何指示!
答案 0 :(得分:6)
是的,OData支持此功能,而且Web API OData也支持它。 OData称之为deep insert
。以下是spec的链接。
现在可以有两种类型的深度插入,
1)嵌套项目也是新项目,应该创建。 json有效负载的示例如下所示,
{
‘Property1’: 42,
‘Property2’: ‘Contoso’,
‘Children’: [
{
‘ChildProperty’: 1,
……….
},
{
‘ChildProperty’: 2,
……….
}]
}
2)嵌套项已经存在,父项是新项,必须链接到嵌套项。 OData协议调用此绑定。示例有效负载看起来像,
{
‘Property1’: 42,
‘Property2’: ‘Contoso’,
‘Children@odata.bind’: [
“http://localhost/Children(1)”,
“http://localhost/Children(2)”,
]
}
Web API OData支持第一种深度插入,并且不支持绑定(第二个示例)。如果是第一个有效负载,您的控制器将收到一个Parent
对象,其中Children
集合已正确填充。
关于你的第二个问题,你有两个选择,
1)将孩子张贴到~/Parents(321)/Children
网址
2)将孩子发布到~/Children
,然后将此孩子的ID链接从此回复发布到网址~/Parents(321)/$links/Children
。
对于OData规范的这一部分,您可以参考此link。