Переход к книге, хранящейся на Sharepoint через Microsoft Graph - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь манипулировать книгой Excel, хранящейся на нашем сервере anet Сервер Sharepoint на

https://xyz.ourserver.com/sites/site/list/subdir/Test.xlsx

Это использование API, которое я получил так далеко (думаю / надеюсь, что это можно сделать намного проще, но сейчас я просто осматриваюсь):

var site = await graphClient
    .Sites["xyz.ourserver.com"]
    .SiteWithPath("sites/site")
    .Request()
    .GetAsync();

var list = await graphClient
    .Sites[site.Id]
    .Lists["list"]
    .Request()
    .GetAsync();

var driveItems = await graphClient
    .Sites[site.Id]
    .Lists[list.Id]
    .Drive
    .Root
    .ItemWithPath("/subdir")
    .Children
    .Request()
    .GetAsync();

Шаги 1 + 2 (получение сайта и списка) работают нормально, но шаг 3 выдает «ItemNotFound Message: ресурс не найден».

Конечно, я пробовал много вариантов этого. Кроме того, этот альтернативный шаг 3 возвращает пустую коллекцию:

var children = await graphClient
    .Sites[site.Id]
    .Lists[list.Id]
    .Drive
    .Root
    .Children
    .Request()
    .GetAsync();

определенно существует «subdir» (как и test.xlsx). Я также уверен, что список в порядке, у него есть свойство WebUrl "https://xyz.ourserver.com/sites/site/list".

1 Ответ

0 голосов
/ 10 марта 2020

Это была проблема с разрешением. Это стало очевидным, когда я сравнил (хорошо выглядящий) результат Graph Explorer json и (пустой) json результат, который получало приложение (которое я проверял в Fiddler).

Я использовал это руководство по Graph (https://github.com/microsoftgraph/msgraph-training-aspnetmvcapp) для изучения Graph API. Разрешения приложения уже были настроены правильно, но я не знал, что PrivateSettings.config также требует дополнительных «ida: AppScopes» (в моем случае: value = "User.Read Calendars.Read Files.Read Files.ReadWrite Files.Read .All Files.ReadWrite.All Sites.Read.All Sites.ReadWrite.All ").

С этими настройками этот код работает:

var drive = await graphClient
    .Sites["rwe.sharepoint.com"]
    .SiteWithPath("sites/site")
    .Lists["list"]
    .Drive
    .Request()
    .GetAsync();

var driveItems = await graphClient
    .Drives[drive.Id]
    .Root
    .ItemWithPath("subdir")
    .Children
    .Request()
    .GetAsync();
...