在OData:操作文档的第2.4节第4段中,它在使用POST创建实体时读取,也可以在同一请求中创建链接。但是,我在努力完成这项工作时遇到了麻烦。关于创建时的多对多链接也有类似的问题,如果没有批量请求,看起来不可能出现特定情况。以下是我尝试使用此sample OData read write service创建的方案。
创建名为“Test Product”的新产品,并使用JSON在单个POST中将其链接到Category(0)。
我试过......
POST /OData/OData.svc/Products HTTP/1.1
Accept: application/json
Content-Type: application/json
{ "ID": 99, "Name": "Test Product", "Description": "Simple Test", "ReleaseDate": "\/Date(1210204800000)\/", "DiscontinuedDate": null, "Rating": 3, "Price": "99.99", "Category":"http://services.odata.org/OData/OData.svc/Categories(0)" }
和......
POST /OData/OData.svc/Products HTTP/1.1
Accept: application/json
Content-Type: application/json
{ "ID": 99, "Name": "Test Product", "Description": "Simple Test", "ReleaseDate": "\/Date(1210204800000)\/", "DiscontinuedDate": null, "Rating": 3, "Price": "99.99", "Category": {"uri": "http://services.odata.org/OData/OData.svc/Categories(0)"} }
两者都会导致失败。
使用原子格式的另一个例子......
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<title type="text"/>
<updated>2010-02-27T21:36:47Z</updated>
<author>
<name/>
</author>
<Link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category" type="application/atom+xml;type=Entry" title="Category" href="Categories(0)"/>
<category term="ODataDemo.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
<content type="application/xml">
<m:properties>
<d:ID m:type="Edm.Int32">99</d:ID>
<d:Name m:type="Edm.String">New Product</d:Name>
<d:ReleaseDate m:type="Edm.DateTime">1992-01-01T00:00:00</d:ReleaseDate>
<d:DiscontinuedDate m:type="Edm.DateTime" m:null="true"/>
<d:Rating m:type="Edm.Int32">4</d:Rating>
<d:Price m:type="Edm.Decimal">2.5</d:Price>
</m:properties>
</content>
</entry>
以上结果创建了201,但没有为链接到现有类别的新产品创建关联。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:5)
Pablo Castro 回答了我的问题。他在Atom有效载荷中建议我将大写“L”改为小写。 IE。
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category" type="application/atom+xml;type=entry" title="Category" href="Categories(0)"/>
对于JSON有效负载,您需要包含“__metadata”才能使其正常工作。 IE。
{
Prop1: ...,
Prop2: ...,
LinkProp1: { __metadata: { uri: "http://..." } }
}