OData批处理多部分格式和Content-ID

时间:2011-03-24 14:18:23

标签: odata

我正在尝试实现一个odata消费者,特别是现在与批处理操作和更改集相关,在odata documentation基本上加载到我用作基础的此样本多部分批处理之后。

但是,当我实际运行此批处理代码(例如通过fiddler请求构建器)更新了我自己的实体路径等时,我收到以下错误:

  

处理批量请求时出错。在   每个操作的开始,恰好两个   标题需要指定:   '内容类型'和   “内容传输编码”。确保   这些标题存在并具有   正确的价值观。

如果我从更改集中删除了Content-ID,则更改集可以正常工作,但显然后面的操作不再有效,因为它们引用了此Content-ID。

我尝试将Content-ID标头移出更改请求multipart .. part标头,并转移到实际的部件有效负载请求标头中,即:

--changeset(77162fcd-b8da-41ac-a9f8-9357efbbd621) 
Content-Type: application/http 
Content-Transfer-Encoding: binary 
Content-ID: 1 

POST /service.svc/Customers HTTP/1.1 
Host: host  
Content-Type: application/atom+xml;type=entry 
Content-Length: ### 

<AtomPub representation of a new Customer> 

变为

--changeset(77162fcd-b8da-41ac-a9f8-9357efbbd621) 
Content-Type: application/http 
Content-Transfer-Encoding: binary 

POST /service.svc/Customers HTTP/1.1 
Host: host  
Content-Type: application/atom+xml;type=entry 
Content-Length: ### 
Content-ID: 1 

再次,这不再抱怨只有标题的更改集,但仍然是后面的引用内容标识失败

  

HTTP 404,找不到段'$ 1'的资源

引用此content-id的请求部分如下所示:

--changeset_7448d3fc-39f6-49bb-b822-30fa4a1676ce
Content-Type: application/http
Content-Transfer-Encoding: binary

POST http://example.org/test.svc/$1/$links/Resources HTTP/1.1
Content-Type: application/json

.. json ..

假设http://example.org/test.svc是服务根目录。

文档内部请求位置的格式不是很清楚,因此路径引用可能不正确。

希望有人能更好地理解这方面,并提前建议,并提出建议。

斯蒂芬。

1 个答案:

答案 0 :(得分:0)

如果操作不是POST,那么如果以这种方式操作就不能引用变更集请求,这从只有POST方法确实需要这个引用的方面才有意义,但是对于需要这种分支逻辑。

但重要的是,引用Content-ID时的路径不应该是绝对的,而应该是:

POST $1/$links/Resources HTTP/1.1
Content-Type: application/json