【问题标题】: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)
         {
             //...
         }                 
    }
    

    问题

    • 在定位 NetCore 2.1 或以上或 .NET FrameworkNullReferenceException 可能会发生异常,以解决此问题 你可以切换到1.16.0-preview.1 (details)

    限制

    注意:一个批次不能容纳超过 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 的支持

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多