通过 Microsoft Graph 导航到存储在 Sharepoint 上的工作簿

Navigating to a workbook stored on Sharepoint via Microsoft Graph

我正在尝试操作存储在我们位于

的 Intranet Sharepoint 服务器上的 Excel 工作簿

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: The resource could not be found."

当然,我尝试了很多变体。此外,此替代步骤 3 returns 一个空集合:

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".

这是一个权限问题。当我比较(看起来不错的)Graph Explorer json 结果和应用程序接收的(空)json 结果(我在 Fiddler 中检查过)时,这变得很明显。

我使用这个图形教程 (https://github.com/microsoftgraph/msgraph-training-aspnetmvcapp) 来探索图形 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();