Microsoft Graph API无法获取SharePoint全部站点页面问题求助
以下是针对你遇到的问题的排查方向和解决办法:
1. 页面类型不匹配:Graph仅返回现代站点页面
Microsoft Graph的/sites/{site-id}/pages/microsoft.graph.sitePage端点仅返回使用「Site Page」内容类型创建的现代页面,而PnP PowerShell的Get-PnPPage默认会覆盖更多页面类型(比如经典Web Part页面、Wiki页面等)。
验证方法
用PnP PowerShell检查「Project Home.aspx」的内容类型:
Get-PnPPage -Identity "Project Home.aspx" | Select-Object Name, ContentType
如果输出的ContentType不是「Site Page」,说明该页面不属于Graph的sitePage端点覆盖范围。
解决办法
要获取这类非现代站点页面,直接调用SharePoint列表项端点(页面本质存储在「Pages」文档库中):
GET https://graph.microsoft.com/v1.0/sites/<site-id>/lists/Pages/items?$filter=File/Name eq 'Project Home.aspx'&$select=id,Name,webUrl
2. 页面处于草稿状态,Graph默认不返回
Graph API的sitePage端点默认只返回已发布的页面,若「Project Home.aspx」是草稿状态,会被自动过滤。
验证方法
用PnP PowerShell检查页面发布状态:
Get-PnPPage -Identity "Project Home.aspx" | Select-Object Name, Published
如果Published值为False,说明页面是草稿状态。
解决办法
在Graph请求中添加includeDraftItems=true参数,即可返回草稿页面:
GET https://graph.microsoft.com/v1.0/sites/<site-id>/pages/microsoft.graph.sitePage?$select=name,id&includeDraftItems=true
3. ID格式不匹配导致404
PnP返回的UniqueId是页面对应列表项的GUID,而Graph的sitePage的id是独立的标识符(格式与列表项ID不同)。直接用PnP的UniqueId调用Graph的页面端点会触发404错误。
解决办法
- 方法1:用文件名过滤Graph请求,获取正确的页面ID:
GET https://graph.microsoft.com/v1.0/sites/<site-id>/pages/microsoft.graph.sitePage?$filter=name eq 'Project Home.aspx'&$select=id,name - 方法2:如果是现代页面之外的类型,直接用列表项端点获取详情:
GET https://graph.microsoft.com/v1.0/sites/<site-id>/lists/Pages/items/{list-item-id}?$expand=File,Fields
内容的提问来源于stack exchange,提问作者robhogg
相关产品推荐
相关产品推荐

