我正在从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标头或其他方式)?
答案 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
并且我的更改已成功完成。
否则我们必须从GET请求中放入odata.etag
字段的内容。例如,对于"@odata.etag": "W/\"08D417AED09F4758\""
,我们将W/"08D417AE4EA83DB1"
放入If-Match
标题。