OData PUT请求获得“428 Precondition Required”的响应

时间:2016-11-28 15:25:53

标签: rest odata postman http-response-codes

我正在从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标头或其他方式)?

1 个答案:

答案 0 :(得分:0)

我在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并且我的更改已成功完成。

enter image description here

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