You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:17:12