如何通过Graph API动态生成SharePoint中OneNote页面深层链接?
能否通过OData参数动态生成?
不行。Graph API将SharePoint中的OneNote笔记本映射为Drive文件夹、分区映射为Drive文件时,这类DriveItem对象的OData参数里并不包含OneNote页面深层链接的生成逻辑,无法直接通过OData扩展或参数来动态生成目标链接。
可行方案
1. 调用OneNote专属Graph API端点直接获取
这是最可靠的方式,OneNote有独立的Graph API分支,能直接返回页面的深层链接:
- 先获取目标站点下的所有OneNote笔记本:
GET /sites/{site-id}/onenote/notebooks - 找到目标笔记本后,获取其下的分区:
GET /sites/{site-id}/onenote/notebooks/{notebook-id}/sections - 再获取目标分区下的所有页面:
GET /sites/{site-id}/onenote/notebooks/{notebook-id}/sections/{section-id}/pages
每个返回的页面对象里,links.oneNoteWebUrl字段就是直接可用的深层链接,点击可直接跳转至对应OneNote页面。
2. 通过DriveItem属性手动构造链接
如果已经通过Drive API拿到了笔记本(文件夹)和分区(文件)的id,可以结合SharePoint OneNote的网页链接格式手动构造:
- 分区级链接格式:
https://{tenant-domain}.sharepoint.com/sites/{site-name}/_layouts/OneNote.aspx?id={notebook-drive-item-id}&wd=target%28{section-name}%7B{section-drive-item-id}%7D%29 - 页面级深层链接需要先通过OneNote API拿到页面的
id,再构造:https://{tenant-domain}.sharepoint.com/sites/{site-name}/_layouts/OneNote.aspx?id={notebook-drive-item-id}&wd=target%28{section-name}%7B{section-id}%7D%2F{page-name}%7B{page-id}%7D%29
注意:构造时需要对特殊字符(如空格、括号)进行URL编码,避免链接失效。
3. 基于分区的webUrl添加锚点定位页面
分区对应的DriveItem会返回webUrl(打开该分区的OneNote链接),可以在这个链接后添加锚点参数定位到具体页面:
{section-web-url}#page-id={page-id}
这里的page-id需要从OneNote API的页面对象中获取,添加后即可直接跳转到目标页面。
内容的提问来源于stack exchange,提问作者Devashish Pawar
相关产品推荐
相关产品推荐

