2016-03-21 8 views
1

Dynamics CRM 2016 Onlineを使用しており、Web API(odata 4.0)エンドポイントを使用してエンティティ(連絡先など)を更新したいとします。Dynamics CRMオンラインおよびWeb API:メソッドによるトンネリング

私は、リクエストをテストするために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 verbをサポートしていないことです。

odataエンドポイントは、POSTと追加のHTTPヘッダーを使用してこの制限を処理できます。ドキュメントからの引用:

この制限を回避するために、ODataサーバーでは、 POSTを使用したトンネリングをサポートできます。トンネリングによって実行される のメソッドは、MERGE、PUTおよびDELETEです。

メソッドトンネリングでリクエストを発行するには、クライアントは必要に応じて本文とヘッダーを含む リクエストを設定しますが、HTTPメソッド の代わりにPOSTを使用します。さらに1つのヘッダ、 "X-HTTP-Method"を追加し、それにMERGE、PUT、またはDELETEの値を与えます。 POSTリクエストがX-HTTP-メソッドヘッダが有効な値のいずれかに を設定し、ヘッダ値がそれのための実際のHTTPメソッドであるかのように要求 の残りの部分を実行する場合がある場合

サーバがチェックしなければなりません。

しかし、私は代わりに、パッチのおよび追加のヘッダとPOSTを使用して、同じ要求を実行しようとすると、私はエラーを受け取る:

message=Unmapped Request found, PathTemplate:~/entityset/key, HttpVerb:POST 

Iはまた、X-HTTP-メソッドオーバーライドヘッダを試しますhereと同じですが、同じ結果です。

私の側から間違いがありますか、エンドポイントはこの機能をサポートしていませんか?ありがとう。

+0

CRMのWeb APIエンドポイントは間違いのODataプロトコルの完全な実装ではありませんので、あなたのPOSTリクエストは、応答が、そのエンドポイントは、プロトコルの一部をサポートしていないことを強く示唆だと受け取った場合。 :/ – Polshgiant

答えて

0

PATCHを使用します(ただし、これはサポートされていません)。

使用PUTこれは私のために働いた

(あなたは、それぞれがPUTコールではなく、完璧な方法が、その何かの属性のために作るためにあなたを強制的に属性のURL/{属性}を、指定する必要がPUTで注意してください) POSTの代わりに

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

関連する問題