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

Microsoft Graph订阅在SharePoint文件更新时未触发通知

问题排查步骤:Webhook订阅成功但未收到文件变更通知

针对你遇到的订阅验证通过,但文件/列表项变更时未收到通知的问题,可按以下方向逐一排查:

1. 订阅的changeType参数不完整

你当前的订阅请求中changeType仅设置为"updated",这只会触发文件修改操作的通知。若要捕获创建、删除操作,需将参数改为:

"changeType": "created,updated,deleted"

2. 订阅资源范围错误

  • 若订阅的是drives/{drive-id}/root:该资源仅监控根目录本身的属性变更(比如重命名根文件夹),不会触发子文件夹或文件的变更通知。要监控整个驱动器的所有文件/文件夹,需调整资源路径为drives/{drive-id}/items(覆盖所有项),或明确指定子目录路径如drives/{drive-id}/root:/Documents:/children。
  • 若订阅的是sites/{site-id}/lists/{list-id}:需确认list-id是对应文档库的列表ID(文档库本质是SharePoint列表),可通过调用GET https://graph.microsoft.com/v1.0/sites/{site-id}/lists验证目标文档库的ID是否正确。

3. 通知URL的可用性问题

虽然订阅验证通过,但后续通知可能因以下原因无法送达:

  • 确保通知URL在公网可访问,避免使用内网IP或localhost地址。
  • 检查HTTPS证书有效性:Microsoft Graph仅信任公开CA颁发的证书,自签名证书会导致推送失败。
  • 检查API的防火墙/安全组规则:需允许Microsoft Graph的IP地址段访问。

4. 订阅状态异常

  • 调用GET https://graph.microsoft.com/v1.0/subscriptions查看订阅是否仍处于活跃状态,确认expirationDateTime未过期。Microsoft Graph订阅最长有效期为3天(部分资源为7天),需定期调用PATCH /subscriptions/{subscription-id}续期。
  • 若订阅状态为failed,查看failureReason字段获取具体错误信息。

5. 通知接收代码存在问题

你的API代码仅实现了验证和反序列化,需补充以下检查:

  • 添加完整的日志记录:在接收通知时记录完整的请求体和响应状态,确认是否有请求进入API。
  • 确保返回200 OK:Microsoft Graph要求通知接收端返回200状态码,若返回4xx/5xx错误,Graph会重试几次后停止推送。
  • 处理异常:捕获反序列化或其他逻辑中的异常,避免因代码崩溃导致请求失败。

示例补充后的代码片段:

[HttpPost]
public async Task<IActionResult> Post([FromQuery] string validationToken)
{
   _logger.LogInformation("Received webhook request.");

   // 处理验证
   if (!string.IsNullOrEmpty(validationToken))
   {
      _logger.LogInformation("Validation token received: {Token}", validationToken);
      return Content(validationToken, "text/plain"); 
   }

   try
   {
      string requestBody;
      using (var reader = new StreamReader(Request.Body))
      {
         requestBody = await reader.ReadToEndAsync();
      }
      _logger.LogInformation("Webhook notification content: {Content}", requestBody);

      dynamic data = JsonConvert.DeserializeObject(requestBody);
      // 处理通知逻辑...

      return Ok(); // 必须返回200 OK
   }
   catch (Exception ex)
   {
      _logger.LogError(ex, "Failed to process webhook notification");
      return Ok(); // 返回200避免Graph停止推送,内部记录错误即可
   }
}

6. 权限配置问题

  • 确认使用的是应用权限而非委派权限:后台服务场景下,委派权限仅在用户登录时有效,需申请Files.ReadWrite.All或Sites.ReadWrite.All应用权限,并完成管理员同意。
  • 检查权限是否已正确授予:通过Azure AD门户查看应用的权限状态,确保权限已生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:08:14