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

如何使用Microsoft Graph SDK订阅OneDrive指定文件夹并开发webhook

解决方案

核心修改点

你当前的代码订阅了OneDrive根目录,是因为Resource参数指向了根目录路径,只需要修改该参数指向指定文件夹即可实现单文件夹订阅。

两种可用的Resource路径写法

  • 方式1(推荐,稳定性最高):使用目标文件夹的唯一ID,路径格式为 /drives/{driveID}/items/{你要订阅的文件夹ID}
    你可以先调用Graph接口查询目标文件夹的ID,也可以直接从OneDrive网页端的地址栏中提取对应ID值。
  • 方式2(适合路径固定的场景):使用根目录相对路径,路径格式为 /drives/{driveID}/root:/{文件夹相对根目录的路径}:
    比如要订阅根目录下名为「项目文档」的文件夹,写法为 /drives/{driveID}/root:/项目文档:

修改后的代码示例

public async Task<ActionResult<string>> Get() {
      var graphServiceClient = GetGraphClient();
      var sub = new Microsoft.Graph.Subscription();
      
      sub.ChangeType = "updated";
      sub.NotificationUrl = config.Ngrok + "/api/notifications";

      // 替换为你要订阅的文件夹路径,此处为文件夹ID写法示例
      sub.Resource = "/drives/{driveID}/items/{替换为目标文件夹ID}";
      sub.ExpirationDateTime = DateTime.UtcNow.AddMinutes(5);
      sub.ClientState = "SecretClientState";

      var newSubscription = await graphServiceClient.Subscriptions.Request().AddAsync(sub);
}

注意事项

  • 确保你的应用已分配对应权限:委托权限需要Files.ReadWrite.All,应用权限需要Files.ReadWrite.All或Files.Read.All(根据业务读写需求调整)
  • OneDrive订阅的最大有效期为43200分钟(30天),生产环境使用需要定期调用更新接口续期订阅
  • 接收通知时可额外校验变动资源的父文件夹ID,避免异常通知干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:48:03