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

时间:2017-04-07 10:43:13

标签: c# onedrive microsoft-graph

如何快速接收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

  

虽然过滤器语法可用于项目的任何属性,但我们已优化某些属性,以便快速有效地进行过滤。

     

注意:在OneDrive for Business,SharePoint Online和SharePoint Server 2016中,过滤仅支持名称网址属性。

是否意味着OneDrive for Business和SharePoint不支持通过 remoteItem 方面进行过滤?

不幸的是,Microsoft Grap documentation不包含任何关于它的其他信息。

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

1 个答案:

答案 0 :(得分:1)

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

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

我还强烈建议转向Microsoft Graph。它提供与OneDrive相同的API,但也暴露了大量其他端点。大量的工作正在融入Graph,使其成为一个更好的长期战略。