使用Graph API在SharePoint指定列表创建页面遇itemNotFound错误求助
问题根源分析
你遇到的itemNotFound错误核心原因有两个:
- API端点误用:你试图通过列表的Drive端点上传页面,但SharePoint标准页面是站点专属资源,需要通过专门的
/pages端点创建,而非直接上传ASPX文件到列表的文档库。 - 请求逻辑不匹配:
/drive/root:/{filename}.aspx:/content端点用于上传二进制文件内容,你传入的却是页面元数据JSON,导致服务无法识别请求意图,返回资源未找到错误。
正确解决方案
场景1:创建子站点下的标准SharePoint页面(推荐)
如果要生成可在SharePoint站点内编辑、展示的官方页面,使用/pages端点:
请求端点
POST https://graph.microsoft.com/beta/sites/{parent-site-id}/sites/{subsite-id}/pages
注:也可直接使用子站点的完整ID,格式为
sites/{subsite-full-id},可通过GET https://graph.microsoft.com/beta/sites/{parent-site-id}/sites获取子站点ID。
请求体(JSON格式)
{ "name": "sample.aspx", "title": "sample", "pageLayout": "article", "description": "Share your creative work with the global Microsoft community by joining this annual showcase of visual art.", "promotionKind": "page", "webParts": [ { "type": "rte", "innerHTML": "<p>填写页面的具体内容</p>" } ] }
场景2:上传ASPX文件到列表关联的文档库
如果确实需要将ASPX文件上传到指定列表的文档库(而非创建标准站点页面),调整请求逻辑:
请求端点
PUT https://graph.microsoft.com/beta/sites/{parent-site-id}/sites/{subsite-id}/lists/{list-id}/drive/root:/sample.aspx:/content
请求配置
- 请求头设置:
Content-Type: text/html - 请求体:直接传入ASPX文件的二进制HTML内容(而非元数据JSON)
额外排查步骤
- 验证资源存在性:先通过GET请求确认子站点和列表是否存在:
若返回404,说明站点/列表ID有误,需核对ID(可通过SharePoint站点URL转换,或Graph API的站点列表接口获取)。GET https://graph.microsoft.com/beta/sites/{parent-site-id}/sites/{subsite-id}/lists/{list-id} - 权限检查:确保应用或用户拥有
Sites.ReadWrite.All/Sites.Manage.All应用权限,或站点Edit级别的委派权限。
内容的提问来源于stack exchange,提问作者Madhu Nali
相关产品推荐
相关产品推荐

