1

我认为这可能是一个简单的引号转义问题,但无法弄清楚。

我正在尝试使用带有 REST API 的 CURL 更新 microsoft planner 任务。我可以毫无问题地创建任务(从名为 FileMaker 的自定义应用程序到使用 Microsoft Graph API 的 Microsoft Planner),但是当我尝试更新计划程序任务时,我收到错误消息“必须为这种类型指定 If-Match 标头要求。” 但是我包括了 If-Match 标头,只是可能没有正确输入它。

URL 是:“https://graph.microsoft.com/v1.0/planner/tasks/”和 $microsoftplannerTaskID

我在 FileMaker 中输入的 CURLOPTIONS 是...

"-X PATCH " & " -H "授权: Bearer " & $$userToken & """ & " -H "Content-Type: application/json"" & " -H "If-Match: " & $microsoftPlannerTasketag & """ & " -d @$PlannerTaskDetails"

最终看起来像这样...... -X PATCH -H“授权:承载 wEXu<>k_QQY”-H“内容类型:应用程序/json”-H“如果匹配:W/”JzEtVGFzayAgQEBAQEBAQBAQEBARCc=""-d @$PlannerTaskDetails

当我最初创建任务时,响应显示… "@odata.etag":"W/"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="" 我在上面的 cURL 标头中使用它。但是……我正在剥离 W/ 和引号。W/ 表示它是“弱”,我假设我们没有将它包含在 PATCH 标题中,但我确实尝试添加它但没有成功。

这是微软的 UPDATE PLANNERTASK 参考…… https://docs.microsoft.com/en-us/graph/api/plannertask-update?view=graph-rest-1.0&tabs=http

我可以毫无问题地使用 POSTMAN 更新任务,但我不知道它们在发送请求时的标题是什么样的。

我可以让它在 Postman 中工作,并在其中输入了 Plan ETag 变量…… W/"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="

我在邮递员中注意到标题显示 etag 是 W/"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="

并且正文返回为 "@odata.etag": "W/"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="",

我的 curloption 变量必须是一个简单的语法问题,但我无法弄清楚。

我还尝试删除 If-Match 标头中的 W/,所以它看起来像这样: -H "If-Match: "JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=""

以及 If-Match 标头中的额外引号,因此看起来像这样: -H "If-Match: JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="

所有这些都会导致相同的“if-match”错误。

一件有趣的事情……如果我更改 If-Match 以在引号前包含一个斜线

-H "如果匹配:"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=""

我在 Filemaker 的脚本调试器中收到错误 10“requested data is missing”,并且从 url 语句中插入没有响应。不过是有道理的,因为它把它读作“if-match:”</p>

如果我在 -H "If-Match: W/"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="" 中添加 W/,同样的事情也会给我错误 10

如果您有任何想法,我将非常感谢您的帮助!!

4

1 回答 1

0

尝试这个:

"-X PATCH " & 
"-H " & quote("Authorization: Bearer " & $$userToken) & 
"-H " & quote("Content-Type: application/json") &
"-H " & quote("If-Match: W/" & quote($microsoftPlannerTasketag)) &
"-d @$PlannerTaskDetails"
于 2020-09-07T17:04:22.277 回答