【问题标题】:OData batch multipart format and Content-IDOData 批量多部分格式和 Content-ID
【发布时间】:2011-07-22 04:33:58
【问题描述】:

我正在尝试实现一个 odata 使用者,特别是现在与执行批处理操作和更改集相关,遵循 odata documentation 基本上加载到我用作基础的这个示例多部分批处理。

但是,当我实际运行使用我自己的实体路径等更新的批处理代码(例如通过提琴手请求生成器)时,我收到以下错误:

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

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

我已尝试将 Content-ID 标头从更改请求的多部分.. 部分标头中移出,并移到实际的部分负载请求标头中,即:

--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 

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

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 是服务根。

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

希望有人更好地了解这方面并可以提出建议,提前谢谢。

斯蒂芬。

【问题讨论】:

    标签: odata


    【解决方案1】:

    事实证明,如果操作不是 POST,那么如果以这种方式操作,则无法引用更改集请求,从只有 POST 方法真正需要此引用的方面来看,这是有道理的,但不这样做会很有用需要这个分支逻辑。

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

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

    【讨论】:

    • 此处描述了 $1 必须是 URL 开头的事实:msdn.microsoft.com/en-us/library/dd541262(v=PROT.10).aspx,尽管我同意这并不完全清楚。
    • 对于 Content-ID 位置,产品(WCF 数据服务)期望它作为批处理部分的标题,而文档指定它作为 MIME 部分的标题。我们知道这种差异,并计划尽快修复它。目前请将 Content-ID 指定为部分 HTTP 标头(而不是 MIME 部分标头)。
    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2018-05-25
    • 2011-05-08
    • 2017-07-02
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多