Microsoft Graph:如何接收驱动器的远程项目列表?

Microsoft Graph: How to receive list of remote items for drive?

如何快速接收 remote items 的驱动器项目列表(链接到其他驱动器上的项目的项目,与我共享的项目)?

我当然可以做类似的事情:

// Universal version
var res = new List<DriveItem>();
var list = await Client.Me.Drive.Root.Children.Request().GetAsync();
while (list != null)
{
    res.AddRange(list.CurrentPage.Where(i => (i.RemoteItem != null)));
    list = (list.NextPageRequest != null) ? (await list.NextPageRequest.GetAsync()) : null;
}
return res;

但它太慢了,需要解析所有项目。我可以使用过滤器来解决这个任务吗?换句话说,下面的代码是否适用于所有类型的驱动器(OneDrive Personal、Business、SharePoint ...)?

// Filtered version
var res = new List<DriveItem>();
var list = await Client.Me.Drive.Root.Children.Request().Filter("remoteItem ne null").GetAsync();
while (list != null)
{
    res.AddRange(list.CurrentPage);
    list = (list.NextPageRequest != null) ? (await list.NextPageRequest.GetAsync()) : null;
}
return res;

根据 OneDrive documentation:

While the filter syntax can be used on any property of an item, we have optimized certain properties to be fast and efficient to filter on.

Note: In OneDrive for Business, SharePoint Online and SharePoint Server 2016, filtering support only name and url properties.

这是否意味着 OneDrive for Business 和 SharePoint 不支持按 remoteItem facet 筛选?

很遗憾,Microsoft Grap documentation 不包含任何关于它的附加信息。

P.S.: 我没有 OneDrive Business 帐户,所以,抱歉,无法检查我的假设。

首先,您应该加入 Office 365 Developer Program。该程序包括一个免费的 Office 365 开发人员许可证,它将解决您的 OneDrive for Business 问题。这两个系统之间存在一些细微差别,因此强烈建议对两者进行测试。

关于你的问题,我会看一下 sharedWithMe 端点。此方法 returns 已从远程驱动器与您共享的项目集合。

我也强烈建议转向 Microsoft Graph。它提供与 OneDrive 相同的 API,但也公开了大量其他端点。大量的努力被汇集到 Graph 中,使其成为一个更好的长期战略。