首页 > 解决方案 > 如何使用 MS Graph API 有效地从多个日历中获取日历视图

问题描述

根据文档,我们可以从用户的默认日历、默认日历组或特定日历组中检索日历视图。

我想知道在给定特定开始日期和结束日期的情况下,我是否能够从多个 Outlook 日历中获取日历视图。

直接的方法可能是:

  1. 调用“ list calendars ”端点

    GET /users/{id | userPrincipalName}/calendars

  2. 对于先前结果中的每个日历 ID,调用“列表日历视图”端点

    GET /users/{id | userPrincipalName}/calendars/{id}/calendarView?startDateTime={start_datetime}&endDateTime={end_datetime}

这种方法的问题在于它不是很有效。想象一下,如果我有 20 多个日历,并且对于每个日历,我需要调用日历视图端点 20 次。不好...

有没有更好的方法来做到这一点?

标签: .netrestoutlookcalendarmicrosoft-graph-api

解决方案


您可以对第二点使用批量请求。

例子:

var today = DateTime.Now.Date;
var start = today.ToString("yyyy-MM-ddTHH:mm:ssK");
var end = today.AddDays(1).ToString("yyyy-MM-ddTHH:mm:ssK");

var queryOptions = new List<QueryOption>
{
    new QueryOption("startDateTime", start),
    new QueryOption("endDateTime", end)
};

var requestIds = new List<string>();
var batchRequestContent = new BatchRequestContent();
foreach (var calendarId in calIds)
{
    var calendarViewRequest = client.Users["id"].Calendars[calendarId].CalendarView.Request(queryOptions);
    var requestId = batchRequestContent.AddBatchRequestStep(calendarViewRequest);
    requestIds.Add(requestId);
}
var returnedResponse = await client.Batch.Request().PostAsync(batchRequestContent);
foreach (var requestId in requestIds)
{
    var result = await returnedResponse.GetResponseByIdAsync<UserCalendarViewCollectionResponse>(requestId);
}

JSON 批处理请求当前限制为 20 个单独的请求。

资源:

批量请求

批处理限制


推荐阅读