使用Microsoft Graph获取共享日历Events始终为null的问题
解决共享日历Events属性为null的问题
你的代码仅获取了日历的基础元数据,MS Graph SDK默认不会自动加载关联的Events属性,这就是共享日历的Events返回null的核心原因。以下是两种可行的解决方式:
方法1:通过$expand同时获取日历及关联事件
修改请求逻辑,添加$expand参数,让接口一次性返回日历及其关联的事件数据:
GraphServiceClient graphClient = new(new AzureAuthenticationProvider()); var calendars = await graphClient.Me.Calendars .Request() .Expand("events") // 显式展开Events关联属性 .GetAsync();
执行后,返回的每个Calendar对象中Events属性会填充对应事件数据。
方法2:单独请求指定共享日历的事件
若不需要同时获取所有日历的事件,可先拿到共享日历的ID,再单独发起事件请求:
GraphServiceClient graphClient = new(new AzureAuthenticationProvider()); // 获取所有日历(含共享日历) var calendars = await graphClient.Me.Calendars.Request().GetAsync(); // 筛选出目标共享日历(示例取第一个共享日历,实际可根据名称/ID筛选) var targetSharedCalendar = calendars.First(c => c.IsShared == true); // 请求该日历的事件列表 var sharedCalendarEvents = await graphClient.Me.Calendars[targetSharedCalendar.Id].Events.Request().GetAsync();
额外注意事项
- 确保你的Bearer令牌包含
Calendars.Read或Calendars.ReadWrite权限(Postman能正常访问说明权限已配置正确,需保证SDK使用的令牌权限一致)。 - 可通过
IsShared属性区分共享日历与个人日历,避免操作错误。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

