【问题标题】:OData PUT request getting response of "428 Precondition Required"OData PUT 请求得到“428 Precondition Required”的响应
【发布时间】:2016-11-28 15:25:53
【问题描述】:

我正在从OData Basic Tutorial 向 TripPin 服务发送 PUT 请求(使用 PostMan)。

PUT http://services.odata.org/v4/TripPinServiceRW/People('russellwhyte')

身体:

{
"@odata.id": "serviceRoot/Airlines('FM')"
}

我收到的回复是428 (Precondition Required)。已经有一个问题OData : Why am I getting HTTP 428 (Precondition Required) error while performing an update,那里的答案是:

您的服务使用乐观锁定并期望 If-Match 请求头,包含实体的ETag,在请求中

但答案并没有说明如何放置正确的 If-Match 标头,我找不到任何示例。

那么我该如何解决这个错误(通过添加带有 ETag 的 If-Match 标头或其他方式)?

【问题讨论】:

    标签: rest odata postman http-response-codes


    【解决方案1】:

    我在http://www.odata.org/documentation/odata-version-2-0/operations/找到了解决方法

    在发出 PUT、MERGE 或 DELETE 请求时,客户端需要指明 If-Match HTTP 请求标头中的 ETag。如果对于给定的客户 可以覆盖服务器中任何版本的条目, 那么可以使用值“*”代替。如果给定的条目有一个 ETag 并且客户端尝试修改或删除条目而没有 If-Match 标头服务器应该以 412 响应使请求失败 代码。

    If-Match 加上'*' 有效,服务器现在返回204 No Content,我的更改已成功完成。

    否则,我们必须从 GET 请求中放入 odata.etag 字段的内容。例如对于"@odata.etag": "W/\"08D417AED09F4758\"",我们将W/"08D417AE4EA83DB1" 放入If-Match 标头中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-15
      • 2012-04-14
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多