これは単純な引用符エスケープの問題ではないかと思いますが、原因がわかりません。
REST API で CURL を使用して Microsoft Planner タスクを更新しようとしています。タスクを (FileMaker というカスタム アプリケーションから Microsoft Graph API を使用して Microsoft Planner に) 問題なく作成できますが、プランナー タスクを更新しようとすると、「この種類には If-Match ヘッダーを指定する必要があります」というエラーが表示されます。リクエストの。」ただし、If-Match ヘッダーを含めていますが、正しく入力されていない可能性があります。
URL は次のとおりです。
「https://graph.microsoft.com/v1.0/planner/tasks/」 & $microsoftplannerタスクID
FileMaker 内で入力している CURLOPTIONS は ...
「-X パッチ」 &
「 -H "権限: ベアラー" & $$userToken と&quoと;"" &
「 -H "Content-Type: application/json"" &
「 -H "If-Match:" & $microsoftPlannerTasktag & 「」 &
「 -d @$PlannerTaskDetails"
最終的にはこんな感じになります…
-X PATCH -H "認可: ベアラー wEXu"k_QQY" -H "コンテンツタイプ: application/json" -H "If-Match: W/"JzEtVGFzayAgQEBAQEBAQBAQEBARCc="" -d @$PlannerTaskDetails
最初にタスクを作成すると、応答は次のように表示されます…
"@odata.etag": "W/" JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=""
上記の cURL ヘッダーで使用しています。しかし…W/と引用符を削除しています。 W/ は「弱い」という意味なので、PATCH ヘッダーにはそれを含めないと思いますが、アドインを試してみましたとにかく実行しても成功しません。
Microsoft の UPDATE PLANNERTASK リファレンスは次のとおりです…
https://learn.microsoft.com/en-us/graph/api/plannertask-update?view=graph-rest-1.0&tabs=http
POSTMAN を使用してタスクを問題なく更新できますが、リクエスト送信時のヘッダーがどのように見えるかわかりません。
これを Postman で動作させることができ、そこで Plan ETag 変数に次のように入力しました。
「JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=」付き
郵便配達員のヘッダーに etag が示されていることに気付きました。
「JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=」付き
そして、体は次のように戻ります
"@odata.etag": "W/" JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="",
これは、curloption 変数の単純な構文の問題に違いありませんが、理解できません。
私もIf-Match ヘッダーの W/ を削除してみたので、次のようになります。
-H "一致の場合: "JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=""
If-Match ヘッダーには追加の引用符が含まれているため、次のようになります。
-H "一致の場合: JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="
これらはすべて同じ「if-match」エラーになります。
興味深いことが 1 つあります。引用符の前にスラッシュを含めるように If-Match を変更すると
-H "一致する場合: "JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=""
Filemaker のスクリプト デバッガでエラー 10「要求されたデータがありません」が発生し、URL からの挿入ステートメントからの応答がありません。ただし、これは「if-match: 」として読み取られるため、意味はあります。
W/ を追加しても同じです
-H "If-Match: W/" JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=""
エラー 10 も表示されます
何かご意見がございましたら、ご協力をよろしくお願いいたします!!
------------------------
これを試してください:
"-X PATCH " &
"-H " & quote("Authorization: Bearer " & $$userToken) &
"-H " & quote("Content-Type: application/json") &
"-H " & quote("If-Match: W/" & quote($microsoftPlannerTasketag)) &
"-d @$PlannerTaskDetails"
2
ダニーロ、ご協力ありがとうございます!あなたの提案を使用すると、curloption は次のようになります... -X PATCH -H "Authorization: Bearer 6sDMsyIDydR9NpZQtkj3o9J0JDG7itu13P44「Iw2gCLLg」 -H "コンテンツタイプ: application/json" -H "If-Match: W/\"JzEtVGFzayAgQEBQEBARCc=\"" -d @$PlannerTaskDetails はエラー 10「リクエスト データが見つかりません」を生成します。
– user14223444
2020 年 9 月 8 日 17:56
if-match の周囲に引用符を追加するだけで、元の etag から W. と引用符を削除しない場合 ... " -H" & Quote ( "If-Match: " & $microsoftPlannerTasketag ) &結果は次のようになります... -H "If-Match: W/\"JzEtVGFzayAgQEBQEBAQEBARCc=\""と別のエラー メッセージが表示されます...要求 URI「tasks.office.com:444/taskapi/v2.0/…」に一致する HTTP リソースが見つかりませんでした。」、「ルーティング規則が見つかりませんでした」テンプレートを使用して OData パスのアクションを選択します。
– user14223444
2020 年 9 月 8 日 18:20