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

如何为MS Graph API的AAD /users集合创建指定字段变更订阅?

解决MS Graph API订阅用户指定字段变更通知的问题

问题核心

你尝试通过/users?$select=GivenName,Surname,MobilePhone,BusinessPhones创建订阅,但仅收到前两个字段的变更通知,且无法实现“仅指定字段变更时触发通知”的需求——这是因为你误解了$select参数的作用:它仅控制通知payload中返回的字段,而非筛选触发通知的变更字段。

正确实现方案

要仅在指定字段(GivenName、Surname、MobilePhone、BusinessPhones)变更时接收通知,需使用Delta查询订阅,而非直接订阅/users集合。Delta查询专门用于跟踪资源的增量变更,只有当你指定的字段发生变化时,才会生成变更条目并触发通知。

代码示例(Microsoft.Graph v5.9.0)

var subscription = new Subscription
{
    ChangeType = "updated",
    NotificationUrl = "https://your-webhook-endpoint.com",
    Resource = "/users/delta?$select=GivenName,Surname,MobilePhone,BusinessPhones",
    ExpirationDateTimeOffset = DateTimeOffset.UtcNow.AddDays(3), // 订阅最长有效期3天
    ClientState = "your-unique-client-state", // 用于验证通知合法性
    LatestSupportedTlsVersion = "v1_2"
};

// 创建订阅
var createdSubscription = await graphClient.Subscriptions.PostAsync(subscription);

关键说明

  1. 使用/users/delta资源:Delta查询会持续跟踪指定字段的变更,只有当这些字段的值发生变化时,才会触发订阅通知,从根源减少无用通知。
  2. 权限要求:确保你的应用已获得User.Read.All(或更高)的应用权限,并完成管理员同意。
  3. 集合字段支持:BusinessPhones作为集合类型字段,Delta查询会正常跟踪其添加、删除、修改的变更。
  4. 订阅有效期:MS Graph订阅最长有效期为3天,需在过期前重新创建订阅以持续接收通知。

内容的提问来源于stack exchange,提问作者Petr Sedláček

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:50:06