【问题标题】:How to batch delete events in Office365 using C# Graph SDK如何使用 C# Graph SDK 批量删除 Office365 中的事件
【发布时间】:2019-06-17 12:39:59
【问题描述】:
我有一个删除多个事件的方法。目前代码如下:
public async Task DeleteEvents(IEnumerable<string> eventExternalIds)
{
foreach(var eventExternalId in eventExternalIds)
{
await DeleteEvent(eventExternalId);
}
}
public async Task DeleteEvent(string eventExternalId)
{
await GraphClient
.Users[Username]
.Calendars[CalendarName]
.Events[eventExternalId]
.Request()
.DeleteAsync();
}
我想它不会在删除大量 id 时表现良好。有没有办法将它们全部删除而不是单独删除?
【问题讨论】:
标签:
c#
microsoft-graph-api
microsoft-graph-calendar
【解决方案1】:
msgraph-sdk-dotnet v1.15.0 或以上
对于msgraph-sdk-dotnet 版本1.15.0 或更高版本 已通过BatchRequestContent class 引入对Batch 请求的支持
例子
//1. construct a Batch request
var batchRequestContent = new BatchRequestContent();
var step = 1;
foreach (var eventId in eventIds)
{
var requestUrl = graphClient
.Me
.Events[eventId]
.Request().RequestUrl;
var request = new HttpRequestMessage(HttpMethod.Delete, requestUrl);
var requestStep = new BatchRequestStep(step.ToString(), request, null);
batchRequestContent.AddBatchRequestStep(requestStep);
step++;
}
//2. Submit request
var batchRequest = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/v1.0/$batch");
batchRequest.Content = batchRequestContent;
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(batchRequest);
var httpClient = new HttpClient();
var batchResponse = await httpClient.SendAsync(batchRequest);
//3. Process response
var batchResponseContent = new BatchResponseContent(batchResponse);
var responses = await batchResponseContent.GetResponsesAsync();
foreach (var response in responses)
{
if (response.Value.IsSuccessStatusCode)
{
//...
}
}
问题
限制
注意:一个批次不能容纳超过 20 个请求
msgraph-sdk-dotnet v1.14.0 或更早版本
对于以前的版本,以下示例演示了如何实现对 Batch 请求的支持:
var batchRequest = new BatchRequest();
foreach (var eventId in eventIds)
{
var request = graphClient.Me.Events[eventId].Request();
batchRequest.AddQuery(request,HttpMethod.Delete);
}
var responses = await graphClient.SendBatchAsync(batchRequest);
其中BatchRequest 是一个自定义类,它增加了对JSON Batching 的支持