使用Microsoft Graph v5.0如何获取SharePoint列表全部项?
Microsoft Graph API 查询SharePoint列表时默认采用分页机制,每页最多返回200条数据。要获取列表中的全部项,你需要处理分页逻辑,循环请求直到没有下一页数据为止。
解决方案1:使用Graph SDK的PageIterator(推荐)
这是SDK封装好的分页工具,代码更简洁:
// 初始化列表存储所有项 var allItems = new List<Microsoft.Graph.Models.ListItem>(); // 创建分页迭代器 var pageIterator = PageIterator<ListItem, ListItemCollectionResponse>.CreatePageIterator( graphClient, // 发起初始请求,设置每页最大条目数(最多500条) await graphClient.Sites[siteId].Lists[listId].Items.GetAsync((requestConfiguration) => { requestConfiguration.QueryParameters.Expand = new string[] { "fields($select=_x0421__x0434__x0440_,_x0421__x0435__x043a__x0446__x04," + "_x041f__x043e__x0432__x0435__x04,_x041a__x043e__x0440__x043f__x04,_x0417__x0430__x0445__x0432__x04,_x0420__x043e__x0437__x0446__x04," + "Title,_x041e__x0434__x002e__x0432__x04,_x041a__x0456__x043b__x044c__x04," + "_x041a__x0456__x043b__x044c__x040,_x041f__x0456__x0434__x0440__x04," + "_x041f__x0440__x0438__x043c__x04)" }; requestConfiguration.QueryParameters.Top = 500; }), // 处理每一项,添加到总列表 (item) => { allItems.Add(item); return true; } ); // 执行迭代,获取所有数据 await pageIterator.IterateAsync(); // allItems 现在包含列表中的全部项
解决方案2:手动处理分页
如果需要更灵活的控制逻辑,可以手动循环请求下一页:
var allItems = new List<Microsoft.Graph.Models.ListItem>(); ListItemCollectionResponse response = null; string nextPageLink = null; do { if (string.IsNullOrEmpty(nextPageLink)) { // 第一次请求,设置每页最大500条 response = await graphClient.Sites[siteId].Lists[listId].Items.GetAsync((requestConfiguration) => { requestConfiguration.QueryParameters.Expand = new string[] { "fields($select=_x0421__x0434__x0440_,_x0421__x0435__x043a__x0446__x04," + "_x041f__x043e__x0432__x0435__x04,_x041a__x043e__x0440__x043f__x04,_x0417__x0430__x0445__x0432__x04,_x0420__x043e__x0437__x0446__x04," + "Title,_x041e__x0434__x002e__x0432__x04,_x041a__x0456__x043b__x044c__x04," + "_x041a__x0456__x043b__x044c__x040,_x041f__x0456__x0434__x0440__x04," + "_x041f__x0440__x0438__x043c__x04)" }; requestConfiguration.QueryParameters.Top = 500; }); } else { // 请求下一页数据 response = await graphClient.Sites[siteId].Lists[listId].Items.WithUrl(nextPageLink).GetAsync(); } // 将当前页的项添加到总列表 if (response.Value != null) { allItems.AddRange(response.Value); } // 更新下一页链接 nextPageLink = response.OdataNextLink; } while (!string.IsNullOrEmpty(nextPageLink)); // allItems 包含列表中的所有项
关键说明
- 可以通过
Top参数设置每页最大返回500条数据,这是Graph API对SharePoint列表的上限,能减少请求次数。 - 分页的核心是检查响应中的
OdataNextLink字段:如果存在该字段,说明还有未返回的数据,需要继续请求该链接;如果为空,说明所有数据已获取完成。
内容的提问来源于stack exchange,提问作者Invop
相关产品推荐
相关产品推荐

