You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Graph API获取SharePoint Webhook的resourceData ID?

获取SharePoint Online驱动器Webhook通知中的DriveItem ID

问题背景

我正在使用MS Graph API开发SharePoint Online驱动器的Webhook通知功能,当前订阅配置如下:

POST https://graph.microsoft.com/v1.0/subscriptions

请求体:

{
    "changeType": "updated",
    "notificationUrl": "https://a123bluhbluh.ngrok-free.app/api/WebHook",
    "resource": "/drive/root",
    "expirationDateTime": "2024-07-01T00:00:00Z",
    "clientState": "c9a46c1f-9d7d-4e2b-80d3-4b18a0d0d4ae"
}

添加/删除文件时能收到通知,但resourceData字段仅返回@odata.type,其余ID等字段为空:

{"value":[
   {"subscriptionId":"XXX",
      "clientState":"c9a46c1f-9d7d-4e2b-80d3-4b18a0d0d4ae",
      "tenantId":"XXX",
      "resource":"drives/root",
      "resourceData":{
          "@odata.type":"#Microsoft.Graph.DriveItem",
          "Id" : null,
          "ODataEtag" : null,
          "ODataId" : null
       },
      "changeType":"updated",
      "subscriptionExpirationDateTime":"2024-07-01T00:00:00Z"
    }
  ]
}

尝试添加"includeResourceData": true参数时订阅失败,该参数对SharePoint资源无效,需要获取DriveItem ID实现后续功能。

原因分析

SharePoint Online的驱动器Webhook订阅不支持includeResourceData参数,这是Graph API的资源限制:该参数仅适用于Outlook、Teams等部分资源,SharePoint的Webhook通知仅会告知资源发生变更,不会返回完整的资源详情。

解决方案

通过DriveItem Delta查询获取具体变更的DriveItem信息,步骤如下:

1. 初始化Delta查询,获取初始Delta链接

首次调用Delta API获取驱动器根目录的变更记录,同时保存响应中的@odata.deltaLink(后续增量查询使用):

GET https://graph.microsoft.com/v1.0/drive/root/delta

响应示例(关键部分):

{
    "@odata.deltaLink": "https://graph.microsoft.com/v1.0/drive/root/delta?$deltatoken=abc123...",
    "value": [
        {
            "id": "01XYZ...",
            "name": "example.docx",
            "file": {},
            "@odata.type": "#microsoft.graph.driveItem"
        }
    ]
}

2. 收到Webhook通知后,调用Delta链接获取增量变更

每次收到Webhook通知时,使用保存的@odata.deltaLink发起请求,即可获取本次变更的具体DriveItem列表(包含ID、变更类型等信息):

GET https://graph.microsoft.com/v1.0/drive/root/delta?$deltatoken=abc123...

响应中会返回所有新增、删除或更新的DriveItem,从中提取所需的ID即可。

3. 优化订阅配置(可选)

将changeType调整为"created,deleted,updated",更精准匹配文件操作类型:

{
    "changeType": "created,deleted,updated",
    "notificationUrl": "https://a123bluhbluh.ngrok-free.app/api/WebHook",
    "resource": "/drive/root",
    "expirationDateTime": "2024-07-01T00:00:00Z",
    "clientState": "c9a46c1f-9d7d-4e2b-80d3-4b18a0d0d4ae"
}

4. 权限要求

确保应用已获得以下权限之一(需授予管理员同意):

  • Files.ReadWrite.All(应用权限)
  • Sites.ReadWrite.All(应用权限)

内容的提问来源于stack exchange,提问作者John Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:23:14