2016-11-28 59 views
0

我正在從OData Basic Tutorial向TripPin服務發送PUT請求(使用PostMan)。獲取「428先決條件要求」的OData PUT請求

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標題,但我找不到任何示例。

那麼我該如何解決這個錯誤(通過添加一個If-Match頭與ETag或其他)?

回答

0

我發現一種解決方法在http://www.odata.org/documentation/odata-version-2-0/operations/

當發出一個PUT,MERGE或DELETE請求,客戶端需要指示 在If-匹配HTTP請求報頭一個ETag。如果對於給定客戶端,它可以接受覆蓋服務器中任何版本的條目 ,則可以使用值「*」代替。如果給定的條目具有ETag ,並且客戶端嘗試修改或刪除條目而不是 If-Match頭服務器應該以412響應 代碼使請求失敗。

將'*'作爲If-Match的作品,服務器現在返回204 No Content,我的更改已成功完成。

enter image description here

否則,我們必須把odata.etag字段的內容從GET請求。例如對於"@odata.etag": "W/\"08D417AED09F4758\"",我們將W/"08D417AE4EA83DB1"放入If-Match標題中。