Как пакетно удалить события в Office365 с помощью C # Graph SDK - PullRequest
1 голос
/ 17 июня 2019

У меня есть метод, который удаляет несколько событий. В настоящее время код выглядит следующим образом:

    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();
    }

Я полагаю, что он не будет хорошо работать с любым значительным числом идентификаторов для удаления. Есть ли способ удалить их все в пакете (ах) вместо каждого в отдельности?

1 Ответ

1 голос
/ 18 июня 2019

msgraph-sdk-dotnet v1.15.0 или выше

Для msgraph-sdk-dotnet версии 1.15.0 или выше добавлена ​​поддержка пакетного запроса через BatchRequestContent класс

Пример

//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 Framework NullReferenceException может возникнуть исключение для решения этой проблемы Вы можете переключиться на 1.16.0-preview.1 ( детали )

Ограничения

Примечание: партия не может содержать более 20 запросов

msgraph-sdk-dotnet v1.14.0 или старше

Для предыдущих версий в следующем примере показано, как реализовать поддержку пакетного запроса:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...