Microsoft Graph не обнаружил ошибки при попытке получить книгу из sharepoint

#c# #microsoft-graph-api

Вопрос:

Я следовал этому уроку: https://mihai-albert.com/2020/05/13/using-microsoft-graph-to-modify-excel-files-stored-in-sharepoint-online-with-c/

Когда я использую graph-explorer и выполняю GET https://graph.microsoft.com/v1.0/drives/{идентификатор диска}/root/поиск(q='{текст поиска}’)?выберите=имя,идентификатор,затем я без проблем получу идентификатор элемента. Но потом, когда я захочу получить книгу в своем приложении

  private readonly GraphServiceClient _graphServiceClient;
        public GraphService(
           IOptions<AzureAdOptions> azureAdOptions)
        {
            var confidentialClientApplication = ConfidentialClientApplicationBuilder
                   .Create(azureAdOptions.Value.ClientId)
                   .WithTenantId(azureAdOptions.Value.TenantId)
                   .WithClientSecret(azureAdOptions.Value.ClientSecret)
                   .Build();

            var authProvider = new ClientCredentialProvider(confidentialClientApplication);
            _graphServiceClient = new GraphServiceClient(authProvider);
        }

        public async Task Test()
        {
            try {
                var range = await _graphServiceClient.Drives[{drive-id}].Items[{item-id}]
                .Request()
                .GetAsync();
               

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
 

затем я получаю ошибку itemnotfound, несмотря на ввод правильных идентификаторов.
Он может найти диск, если я просто добавлю эту часть, так что не похоже, что у меня проблемы с настройкой.
кто-нибудь сталкивался с этой проблемой или знает, как ее решить?

Ответ №1:

При использовании разрешений приложения для вызова GET /дисков/{идентификатор диска}/элементов/{идентификатор элемента} вашему приложению требуется одно из разрешений приложения, перечисленных здесь, скорее всего, Файлы.Читать.Все

Я заметил, что когда у вас есть acess_token, у которого нет одного из необходимых разрешений, вы получаете его не найденным, что вводит в заблуждение.

В вашем случае просто добавьте разрешения Files.Read.All приложения(требуется согласие администратора) в ваше приложение в Azure AD.

Комментарии:

1. Большое спасибо! На самом деле я в конце концов понял это, но забыл обновить этот пост. Ошибка действительно вводила в заблуждение.