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

如何用.NET SDK获取超5000项OneDrive中OneNote笔记本分区?

解决OneNote分区分页获取问题(针对5000+文件的10008错误)

当遇到OneDrive API的查询限制(错误码10008)时,核心就是通过分页查询来分批获取数据,不管是用Microsoft Graph .NET SDK还是直接调用REST API都能实现,下面分别给出具体实现方式:

一、使用Microsoft Graph .NET SDK实现分页

Graph SDK本身已经内置了分页处理的能力,你之前的代码只调用了GetAsync()只能拿到第一页,改成下面的循环逻辑就能搞定:

var allSections = new List<OnenoteSection>();
var sectionsPage = await graphClient.Users[userId].Onenote.Notebooks[notebookId].Sections.Request().GetAsync();

// 先添加第一页数据
allSections.AddRange(sectionsPage.CurrentPage);

// 循环获取后续分页数据
while (sectionsPage.NextPageRequest != null)
{
    sectionsPage = await sectionsPage.NextPageRequest.GetAsync();
    allSections.AddRange(sectionsPage.CurrentPage);
}

// allSections集合里就是该笔记本下的所有分区了

这个逻辑会自动处理分页:每次拿到当前页后,检查是否存在NextPageRequest,如果有就继续请求下一页,直到没有更多数据为止,完全避开5000条的限制阈值。

二、改用REST API实现分页

如果更倾向于直接调用REST API,分页的核心是利用$top参数控制每页数量,以及响应中的@odata.nextLink来获取下一页的请求地址:

  1. 第一页请求:
    发送GET请求到以下地址(替换{userId}和{notebookId}):

    https://graph.microsoft.com/v1.0/users/{userId}/onenote/notebooks/{notebookId}/sections?$top=1000
    

    这里$top=1000表示每页最多拿1000条数据(你可以根据需求调整,比如500或2000,只要不超过5000的限制就行)。

  2. 后续分页请求:
    查看响应的JSON内容,如果包含@odata.nextLink字段,就用这个字段的值作为下一页的请求地址,重复发送GET请求,直到响应中不再出现@odata.nextLink,说明所有数据都获取完毕。

举个简化版的响应示例:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/{userId}/onenote/notebooks/{notebookId}/sections",
    "@odata.nextLink": "https://graph.microsoft.com/v1.0/users/{userId}/onenote/notebooks/{notebookId}/sections?$top=1000&$skiptoken=abc123...",
    "value": [
        // 分区数据列表
    ]
}

你只需要循环调用@odata.nextLink对应的地址即可完成全量数据获取。

不管用哪种方式,分页都能完美解决5000条数据的限制问题,根据你的项目需求选择合适的实现方式就好。

内容的提问来源于stack exchange,提问作者Thomas Harris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:27:06