Microsoft Graph最近项接口如何获取OneNote笔记本显示名而非文件名
结论
/me/drive/recent接口目前不支持单请求直接返回OneNote笔记本的自定义displayName。你看到的office.com页面对OneNote项展示的自定义名称,是前端拿到基础文件列表后,对OneNote类型文件做了二次关联查询得到的,并非该接口直接返回的字段。
最简实现方案
不需要每次全量拉取所有OneNote笔记本列表做遍历匹配,利用接口返回结果里自带的关联ID做定向查询即可,性能开销极低:
- 先遍历
/me/drive/recent?top=6的返回结果,筛选出file.mimeType为application/msonenote的OneNote类型项 - 从OneNote项的
remoteItem.sharepointIds字段(个人盘非共享文件直接取根节点下的sharepointIds)提取两个关键关联值:siteId和listItemUniqueId - 用Graph的批量查询能力,针对每个筛出的OneNote项定向查询笔记本信息,查询路径为
/sites/{siteId}/onenote/notebooks?$filter=id eq '{listItemUniqueId}',返回结果中的displayName就是需要的笔记本展示名称
避坑提示:不要用截取webUrl参数、匹配
.one后缀文件名的方式做关联,这类方案会因为URL规则调整、文件重命名出现匹配错误,直接使用接口返回的结构化ID字段稳定性最高。
无效方案说明
- 尝试在recent接口后拼接
$expand=onenote、$expand=section类参数没有效果:当前drive/recent接口的返回模型没有绑定OneNote相关导航属性,即使加expand参数也不会返回笔记本的扩展信息 - 每次请求全量拉取
/me/onenote/notebooks列表做本地映射的方案性能很差:如果用户存储的笔记本数量较多,会拉取大量冗余数据,远不如按ID定向查询的效率高
对于仅拉取6个最近文件的场景,就算6个项全是OneNote文件,批量定向查询的额外耗时几乎可以忽略,这是目前官方能力范围内最简便的实现方式,不存在更短的原生单请求解决方案。
内容的提问来源于stack exchange,提问作者Bernhard Riegler
相关产品推荐
相关产品推荐

