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と同じですが、同じ結果です。
私の側から間違いがありますか、エンドポイントはこの機能をサポートしていませんか?ありがとう。
CRMのWeb APIエンドポイントは間違いのODataプロトコルの完全な実装ではありませんので、あなたのPOSTリクエストは、応答が、そのエンドポイントは、プロトコルの一部をサポートしていないことを強く示唆だと受け取った場合。 :/ – Polshgiant