求助:SharePoint调用MS Graph API获取Drive全部项需强制Filter
解决MS Graph API获取Drive全部文件文件夹的问题
你遇到的问题是因为调用的/drives/{drive-id}/items端点针对部分Drive类型(比如SharePoint站点的文档库)强制要求传入$filter参数,但其实要获取全部文件和文件夹,应该用根目录子项端点,而非直接调用Drive的items集合。
正确的API调用方式
直接调用根目录的children接口,无需任何过滤参数就能返回根目录下所有文件和文件夹:
GET https://graph.microsoft.com/v1.0/drives/{drive-id}/root/children
如果需要递归获取所有层级的子项,可以结合$expand参数(注意单次请求有数量限制,大量文件需分页处理):
GET https://graph.microsoft.com/v1.0/drives/{drive-id}/root/children?$expand=children
Graph Java SDK 代码示例
用Java SDK的话,对应的调用代码如下:
// 假设已完成GraphServiceClient的身份验证初始化 DriveItemCollectionPage items = graphClient.drives("{drive-id}") .root() .children() .buildRequest() .get(); // 遍历返回的文件/文件夹项 for (DriveItem item : items) { System.out.println(item.name + " - 类型:" + (item.folder != null ? "文件夹" : "文件")); }
为什么原端点需要filter?
/drives/{drive-id}/items是查询Drive全局所有项的接口,但对于SharePoint关联的Drive,微软出于性能和数据量控制的考虑,强制要求通过$filter缩小查询范围。而/root/children是专门获取根目录直接子项的接口,没有这个限制,完全匹配你获取全部内容的需求。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

