Не удается получить настройки Mailbox от Microsoft Graph с. Net SDK - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь получить настройки почтового ящика пользователя из Microsoft Graph v1.0 с Ms Graph. Net SDK и с разрешениями приложения.

У меня есть правильные разрешения (MailboxSettings.Read и User. Прочитайте все), и они согласны с правами администратора.

Вот код вызова:

    var settings = await graphClient.Users[{userId}].Request()
        .Select(e => new
        {
            e.MailboxSettings
        })
        .GetAsync();

Когда я звоню, я получаю сообщение об ошибке:

ErrorAccessDenied, доступ запрещен. Проверьте учетные данные и повторите попытку.

Нет ничего плохого в моем объекте graphClient, поскольку я могу успешно вызывать другие ресурсы, например:

var events = await graphClient.Users[{userId}].Events.Request()

Я пытался сделать HTTP-запрос к API, и тогда я получу успешный ответ. (Я использую тот же clientId, clientSecret et c. При создании graphClient и при получении токена аутентификации для вызова API).

Это конечная точка, которую я вызываю:

https://graph.microsoft.com/v1.0/users/ {userId} / mailboxSettings

Почему при использовании SDK возникает ошибка? Мой запрос неверен или в SDK есть ошибка?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Понял. Это ошибка: https://github.com/microsoftgraph/msgraph-sdk-dotnet/issues/538. Для чтения MailboxSettings необходимы разрешения на чтение и запись.

0 голосов
/ 29 января 2020

Вы можете использовать это только с mailboxsettings.read.

async Task GetMailboxSettings(GraphServiceClient client)
{
    var mailboxSettingsUrl = client.Users["adelev@contoso.onmicrosoft.com"].RequestUrl + "/mailboxsettings";
    HttpRequestMessage hrm = new HttpRequestMessage(HttpMethod.Get, mailboxSettingsUrl);

    await client.AuthenticationProvider.AuthenticateRequestAsync(hrm);

    HttpResponseMessage response = await client.HttpProvider.SendAsync(hrm);

    if (response.IsSuccessStatusCode)
    {
        // Deserialize into OneNotePage object.
        var content = await response.Content.ReadAsStringAsync();
        MailboxSettings mailboxSettings = client.HttpProvider.Serializer.DeserializeObject<MailboxSettings>(content);
    }
}
...