Мне нужно использовать Microsoft Graph API для получения графиков занятости из календаря с помощью службы. NET Core Windows. Согласно собственной документации Microsoft, я должен использовать следующее:
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var schedules = new List<String>()
{
"adelev@contoso.onmicrosoft.com",
"meganb@contoso.onmicrosoft.com"
};
var startTime = new DateTimeTimeZone
{
DateTime = "2019-03-15T09:00:00",
TimeZone = "Pacific Standard Time"
};
var endTime = new DateTimeTimeZone
{
DateTime = "2019-03-15T18:00:00",
TimeZone = "Pacific Standard Time"
};
var availabilityViewInterval = 60;
await graphClient.Me.Calendar
.GetSchedule(schedules,endTime,startTime,availabilityViewInterval)
.Request()
.Header("Prefer","outlook.timezone=\"Pacific Standard Time\"")
.PostAsync();
Я зарегистрировал новое приложение на портале Azure и дал ему разрешение Calendars.Read.
My C# code:
try
{
IConfidentialClientApplication clientApplication = ConfidentialClientApplicationBuilder
.Create(_clientId)
.WithTenantId(_tenantId)
.WithClientSecret(_clientSecret)
.Build();
var authProvider = new ClientCredentialProvider(clientApplication);
var graphClient = new GraphServiceClient(authProvider);
var schedules = new List<string>
{
"example@mail.com" // not actual mail used in my application
};
var startTime = new DateTimeTimeZone
{
DateTime = "2020-04-18T00:00:00",
TimeZone = "Europe/Paris"
};
var endTime = new DateTimeTimeZone
{
DateTime = "2020-04-25T23:59:59",
TimeZone = "Europe/Paris"
};
ICalendarGetScheduleCollectionPage scheduleList = await graphClient.Me.Calendar
.GetSchedule(schedules, endTime, startTime, 60)
.Request()
.PostAsync().ConfigureAwait(false);
Console.WriteLine("scheduleList.Count: " + scheduleList.ToList().Count);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Когда я запускаю свое приложение, я получаю следующее исключение:
Код: BadRequest
Сообщение: текущий контекст аутентификации недопустим для этого запроса. Это происходит, когда запрос сделан к конечной точке, которая требует входа пользователя. Например, для / me требуется зарегистрированный пользователь. Получите токен от имени пользователя для отправки запросов к этим конечным точкам. Используйте поток кода авторизации OAuth 2.0 для мобильных и собственных приложений и неявный поток OAuth 2.0 для одностраничных веб-приложений.