SharePoint Online子站点列表查询中Microsoft Graph @odata.nextLink问题咨询
理解并处理Microsoft Graph API的分页响应
嘿,这个情况其实是Graph API正常的分页机制在工作,完全不用慌!当你指定top=10请求列表项,但实际列表里有50条数据时,Graph API不会一次性把所有数据都返回给你——为了避免大量数据传输影响性能,它会把数据拆分成多页,@odata.nextLink就是用来获取下一页数据的入口。
为什么会出现@odata.nextLink?
Graph API对单次请求返回的数据量有默认限制(就算你指定了top,如果总数据量超过这个值或者你指定的top值,都会触发分页)。当总条目数超过单次能返回的数量时,响应里就会带上这个nextLink,告诉你“还有数据没给你,点这个链接拿剩下的”。
怎么拿到所有50条项目?
你只需要照着@odata.nextLink里的URL发起GET请求就行了,这个请求会返回接下来的10条数据。你可以循环这个过程:每次请求完当前页,就检查响应里有没有@odata.nextLink,如果有就继续请求,直到响应里没有这个字段,说明所有数据都已经获取完毕了。
给你写个简单的伪代码逻辑参考:
// 初始化存储所有条目的数组 let allListItems = []; // 初始请求地址 let currentRequestUrl = "https://graph.microsoft.com/v1.0/sites/root:/subsite_a:/lists/d383fe85-83e3-448d-afc8-cc42ee9de535/items?top=10"; do { // 发起GET请求到当前URL const response = await fetch(currentRequestUrl, { headers: { Authorization: "Bearer YOUR_ACCESS_TOKEN" } }); const data = await response.json(); // 将当前页的条目加入总数组 allListItems.push(...data.value); // 更新请求地址为下一页的链接(如果存在) currentRequestUrl = data["@odata.nextLink"]; } while (currentRequestUrl); // 现在allListItems里就包含了所有50条列表项啦
小提示
- 如果你想试试一次性获取所有50条数据,可以把
top参数改成50(只要这个数值不超过Graph API的单次返回上限,通常列表项的上限是200条),这样可能就不会出现分页链接了。不过分页是Graph API的通用机制,掌握它还是很有必要的,毕竟以后遇到更大的数据集肯定会用到。 - 调用
@odata.nextLink的时候不需要额外修改请求头或者权限,这个链接已经包含了所有必要的上下文信息,直接用就行。
内容的提问来源于stack exchange,提问作者Baris Bikmaz
相关产品推荐
相关产品推荐

