我正在使用Dynamics CRM 2016 Online,並且想要使用Web API(odata 4.0)端點更新實體(例如聯繫人)。動態CRM Online和Web API:通過POST隧道方法
我使用Fiddler來測試請求。這裏是請求的細節:
PATCH https://XXXXXXXXXXX/api/data/v8.0/contacts(6b902ae1-19ed-e511-80e3-5065f3890551)
User-Agent: Fiddler
Host: XXXXXXXXX
Content-Length: 54
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Content-Type: application/json
Authorization: Bearer XXXXXXXX
{
"firstname": "John",
"lastname": "Doe"
}
它運作良好。問題是客戶端不支持PATCH謂詞。
odata端點可以通過使用POST和額外的HTTP標頭來處理此限制。從文檔中引用:
爲了幫助解決此限制,OData服務器可以通過POST支持隧道方式 。通過隧道執行的方法可以是 是MERGE,PUT和DELETE。
要使用方法隧道發送請求,客戶端根據需要設置帶有主體和標頭的請求 ,但使用POST作爲HTTP方法 而不是實際需要的。然後它再添加一個頭, 「X-HTTP-Method」,並給它MERGE,PUT或DELETE的值。
服務器必須檢查POST請求有X-HTTP-方法報頭中設置 到有效值之一併且如果是這樣執行請求 的其餘部分如果標頭值對於它的實際HTTP方法。
但是,當我試圖執行使用代替PATCH並與附加的報頭POST相同的請求,收到一個錯誤:
message=Unmapped Request found, PathTemplate:~/entityset/key, HttpVerb:POST
我也嘗試在X-HTTP-方法-Override標頭如here所述,但結果相同。
從我這邊是否有錯誤或端點不支持此功能?謝謝。
CRM的Web API端點絕對不是OData協議的完整實現,因此,如果您的POST請求收到響應,那麼這是一個強有力的跡象表明,終端不支持該協議的一部分。 :/ – Polshgiant