Следующая реализация прекрасно работает до 18 марта 2019 года.
var graphClient = this.graphService.GraphClient;
var reqUrl = graphClient
.Me
.Request()
.RequestUrl;
reqUrl += "/findMeetingTimes";
var headers = new Dictionary<string, string>
{ { "Prefer", $"outlook.timezone = \"{parameter.PreferredTimeZone}\"" },
};
var noOfMeetingSlots = parameter.MaxCandidates ?? 5;
parameter.MaxCandidates = 25;
var hrm = this.graphService.CreateHttpPostRequest<MeetingSuggestionParameter>(
parameter,
new Uri(reqUrl),
headers);
await graphClient
.AuthenticationProvider
.AuthenticateRequestAsync(hrm)
.ConfigureAwait(false);
MeetingSuggestionResult result = null;
try
{
using(HttpResponseMessage response = await graphClient
.HttpProvider
.SendAsync(hrm)
.ConfigureAwait(false)) {
Исключение:
graphClient.HttpProvider.SendAsync throws 403 Forbidden.
Exception Message:
Code: UnknownError
Inner error
StackTrace
at Microsoft.Graph.HttpProvider.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at Publicis.Marcel.Services.Calendar.CalendarService.FindMeetingSuggesstionsWithParametersAsync(MeetingSuggestionParameter parameter) in E: \Assistant2\o365\Services\Publicis.Marcel.Services.Calendar\Concrete\CalendarService.cs:line
Следующий фрагмент кода работает с использованием Client SDK:
var re = await graphClient
.Me
.FindMeetingTimes(
Attendees,
null,
null,
new Duration(parameter.MeetingDuration),
parameter.MaxCandidates,
parameter.IsOrganizerOptional,
parameter.ReturnSuggestionReasons,
parameter.MinimumAttendeePercentage)
.Request()
.PostAsync()
.ConfigureAwait(false);
Вещи, которые я уже проверил
- Разрешение участника службы Azure AD.У него есть
caledar.read
и calendar.read.Shared
Это работало в производстве до 18 марта 2019 года, когда он начал бросать 403 Forbidden
.