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

如何将MS Graph API调用转换为GraphServiceClient方法调用

查询其他用户日历的GraphServiceClient写法

实现代码

你要调用的REST接口对应Microsoft Graph v5 SDK(当前项目通过Microsoft.Identity.Web集成的默认版本)的写法如下,直接替换原代码中的????部分即可:

// 替换为目标日历所属用户的SMTP地址或Azure AD用户ID
string targetCalendarUser = "<替换为目标用户的calendarSMTP值>";
var startDateTime = new DateTimeOffset(2022, 7, 5, 0, 0, 0, TimeSpan.Zero);
var endDateTime = new DateTimeOffset(2022, 7, 5, 23, 59, 0, TimeSpan.Zero);

var cal = await _graphServiceClient.Users[targetCalendarUser]
    .CalendarView
    .GetAsync(config =>
    {
        config.QueryParameters.StartDateTime = startDateTime.ToString("o");
        config.QueryParameters.EndDateTime = endDateTime.ToString("o");
        config.QueryParameters.Select = new[] { "start", "end", "subject" };
        // 可选:指定返回事件的时区,避免时间转换问题
        config.Headers.Add("Prefer", "outlook.timezone=\"China Standard Time\"");
    });

必要配置修正

当前启动代码缺少Graph客户端的注册逻辑,需要在服务注册链中补充AddMicrosoftGraph,否则注入的GraphServiceClient不会自动携带用户凭据获取访问令牌,修正后的启动配置:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
         .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"))
           .EnableTokenAcquisitionToCallDownstreamApi()
           // 补充这行注册Graph客户端
           .AddMicrosoftGraph("https://graph.microsoft.com/v1.0", new[] { "Calendars.ReadWrite" })
           .AddInMemoryTokenCaches();

var app = builder.Build();

注意事项

  • 调用CalendarView接口时,传入的时间参数建议使用ISO 8601格式(代码中ToString("o")就是输出该格式),避免接口解析时间出错
  • 如果调用返回403权限不足,需要确认两个点:
    • Azure AD应用注册中已经添加Calendars.ReadWrite委托权限,且如果是访问组织内所有用户日历,需要完成管理员同意
    • 如果是用户个人共享日历的场景,确认当前登录账号已经被授予目标用户日历的对应访问权限
  • CalendarView会自动展开周期性会议的单次实例,返回指定时间范围内实际发生的所有日程,比直接查询Events接口更适配时间段日程查询的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:21:20