Microsoft Graph REST API 来更新 Microsoft Planner 任务?

Posted

技术标签:

【中文标题】Microsoft Graph REST API 来更新 Microsoft Planner 任务?【英文标题】:Microsoft Graph REST API to UPDATE Microsoft Planner Tasks? 【发布时间】:2020-12-24 03:31:12 【问题描述】:

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

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

网址是: "https://graph.microsoft.com/v1.0/planner/tasks/" & $microsoftplannerTaskID

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

"-X 补丁" & " -H "授权:承载" & $$userToken & """ & " -H "内容类型:应用程序/json"" & " -H "如果匹配:" & $microsoftPlannerTasketag & """ & " -d @$PlannerTaskDetails"

最终看起来像这样…… -X PATCH -H "授权:承载 wEXuk_QQY" -H "Content-Type: application/json" -H "If-Match: W/"JzEtVGFzayAgQEBAQEBAQBAQEBARCc="" -d @$PlannerTaskDetails

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

这是 Microsoft 的 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 "如果匹配:"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc=""

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

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

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

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

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

如果我重新添加 W/ 也是一样的 -H "如果匹配:W/"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBARCc="" 也给我错误 10

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

【问题讨论】:

【参考方案1】:

试试这个:

"-X PATCH " & 
"-H " & quote("Authorization: Bearer " & $$userToken) & 
"-H " & quote("Content-Type: application/json") &
"-H " & quote("If-Match: W/" & quote($microsoftPlannerTasketag)) &
"-d @$PlannerTaskDetails"

【讨论】:

感谢您的帮助达尼洛!当我使用您的建议时, curloption 看起来像... -X PATCH -H "Authorization: Bearer 6sDMsyIDydR9NpZQtkj3o9J0JDG7itu13P44Iw2gCLLg" -H "Content-Type: application/json" -H "If-Match: W/\"JzEtVGFzayAgQEBQEBARCc=\" " -d @$PlannerTaskDetails 产生错误 10 "request data is missing" 如果我只在 if-match 周围添加一个引号而不删除原始 etag 中的 W. 和引号 ... " -H " & Quote ( "If-Match: " & $microsoftPlannerTasketag ) 并导致此... -H "If-Match: W/\"JzEtVGFzayAgQEBQEBAQEBARCc=\"" 和不同的错误消息...未找到与请求 URI 'tasks.office.com:444/taskapi/v2.0/… 匹配的 HTTP 资源。 , "没有找到为带有模板的 OData 路径选择操作的路由约定"

以上是关于Microsoft Graph REST API 来更新 Microsoft Planner 任务?的主要内容,如果未能解决你的问题,请参考以下文章

使用 microsoft graph api 检出 onedrive 文件的状态

创建传入用户对象的用户 (Microsoft Graph)

MS Graph API订阅邮件发送

对 On Premise Exchange 的 Graph API 调用仅适用于 Playground

MS Graph API:microsoft.graph.createLink 未创建匿名视图链接

获取 Microsoft Graph API 的有效访问令牌