2016-03-21 68 views
1

我正在使用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所述,但結果相同。

從我這邊是否有錯誤或端點不支持此功能?謝謝。

+0

CRM的Web API端點絕對不是OData協議的完整實現,因此,如果您的POST請求收到響應,那麼這是一個強有力的跡象表明,終端不支持該協議的一部分。 :/ – Polshgiant

回答

0

使用補丁(但你說這個不支持)。

使用PUT(與PUT注意,您必須指定屬性URL/{屬性},這迫使你做出的每個屬性的PUT調用,不完美的方式,但它的東西)

這爲我工作而不是一個POST。

https://msdn.microsoft.com/en-us/library/mt607664.aspx