使用Microsoft Graph API按displayName/name查询Sites失败如何解决
问题原因
/sites根路径的$filter参数当前不支持对name、displayName属性的过滤操作,仅支持对id、sharepointIds等少数字段过滤,所以此前的$filter请求返回BadRequest属于正常情况。- 此前的
$search用法不符合接口要求:站点全局搜索的$search无需指定匹配字段,且必须同时传入$count=true查询参数,请求头中添加ConsistencyLevel: eventual,否则会返回空结果或报错。
可行解决方案
方案一:通过关联Microsoft 365组查询(推荐,适配Teams团队站点场景,准确率最高)
每个Teams团队对应一个Microsoft 365组,二者displayName完全一致,通过组查询站点不会匹配到无关的SharePoint站点。
- 第一步:通过团队displayName查询对应M365组ID
请求示例:
权限要求:GET https://graph.microsoft.com/v1.0/groups?$filter=displayName eq 'IT-Team'&$select=idGroup.Read.All或更高权限 - 第二步:通过组ID查询对应团队站点信息
请求示例:
返回报文中的GET https://graph.microsoft.com/v1.0/groups/{替换为上一步获取的组ID}/sites/root?$select=id,name,displayName,sharepointIdsid字段即为所需的SiteId。
方案二:直接搜索站点
需同时满足以下请求要求:
- 请求头添加:
ConsistencyLevel: eventual - 查询参数添加
$count=true $search参数直接传入搜索关键词,无需指定匹配字段
请求示例(已做URL编码):
GET https://graph.microsoft.com/v1.0/sites?$search=%22IT-Team%22&$count=true&$select=id,name,displayName
权限要求:Sites.Read.All 或更高权限
内容的提问来源于stack exchange,提问作者KekuSemau
相关产品推荐
相关产品推荐

