Microsoft Graph API - определение того, существует ли событие календаря - C #

Я вставляю события календаря в календари O365 пользователей нашего домена с помощью Microsoft Graph API. Мне нужно определить, существует ли событие, но мое исследование только показало, как использовать сценарий GraphClient.Me.Events для поиска. Я не верю, что это сработает, поскольку у нас есть глобальный доступ ко всем календарям (Calendars.ReadWrite) в нашем домене.

Есть ли способ найти событие в соответствующем календаре пользователей домена перед синхронизацией?

var scopes = new string[] { "https://graph.microsoft.com/.default" };
var confidentialClient = ConfidentialClientApplicationBuilder.Create(clientId).WithTenantId(tenantId).WithClientSecret(clientSecret).Build();
var authResult = await confidentialClient.AcquireTokenForClient(scopes).ExecuteAsync();
            
using (HttpClient c = new HttpClient())
{
    string url = "https://graph.microsoft.com/v1.0/users/" + userEmail + " /calendar/events";
    ToOutlookCalendar createOutlookEvent = CreateEvent();

    HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(createOutlookEvent), Encoding.UTF8, "application/json");
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
    request.Content = httpContent;
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);

var response = await c.SendAsync(request);
var responseString = await response.Content.ReadAsStringAsync();  
}

Календарное событие в настоящее время очень просто для тестирования

public static ToOutlookCalendar CreateEvent()
{
     ToOutlookCalendar outlookEvent = new ToOutlookCalendar
     {
          Subject = "Code test migration appt",
          Body = new Body
          {
              ContentType = "HTML",
              Content = "Testing API with application client authorization"
          },
          Start = new End
          {
               DateTime = "2020-06-22T12:30:00",TimeZone = System.TimeZone.CurrentTimeZone.StandardName
          },
          End = new End
          {
               DateTime = "2020-06-22T14:00:00",TimeZone = System.TimeZone.CurrentTimeZone.StandardName
          },
          Location = new LocationName
          {
               DisplayName = "Sample Location"
          }
     };
     return outlookEvent;
}

person user1892132    schedule 22.06.2020    source источник


Ответы (1)


Предполагая, что вы ориентируетесь на календарь по умолчанию для пользователя, да.

сегмент пути /me является псевдонимом для upn или userId, поэтому что-то вроде:
"https://graph.microsoft.com/v1.0/users/" + userEmail + "/calendar/events?$filter=subject eq '" + knownTitle + "'"
Должно работать нормально, если вы используете токен только для приложения с достаточными разрешениями

person GavinB    schedule 23.06.2020
comment
Огромное спасибо. Моя проблема связана с фильтром, поэтому спасибо за ответ. - person user1892132; 29.06.2020