如何快速接收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商业帐户,所以,抱歉无法检查我的假设。
答案 0 :(得分:1)
首先,您应该加入Office 365 Developer Program。此程序包含免费的Office 365 Developer许可证,该许可证将解决您的OneDrive for Business问题。这两个系统之间存在一些细微差别,因此强烈建议对两者进行测试。
关于你的问题,我会看一下sharedWithMe端点。此方法返回已从远程驱动器与您共享的项集合。
我还强烈建议转向Microsoft Graph。它提供与OneDrive相同的API,但也暴露了大量其他端点。大量的工作正在融入Graph,使其成为一个更好的长期战略。