如何通过Microsoft Graph API查询指定用户的SharePoint共享链接
你之前的思路里,User->Drive对应的是用户个人OneDrive,而非SharePoint站点的文档库,这可能是你构建请求失败的原因。下面提供两种可行的实现方式:
一、从Site对象起点查询(推荐)
如果知道目标SharePoint站点的ID或URL,直接从Site出发查询更精准:
- 先获取目标站点的所有文档库(Drive)
GET https://graph.microsoft.com/v1.0/sites/{site-id}/drives
要是不知道站点ID,也可以通过站点URL获取:
GET https://graph.microsoft.com/v1.0/sites/{域名}:/{站点路径}
- 查询单个文档库中带共享链接的文件/文件夹
用$filter筛掉share属性为空的项,同时用$expand展开共享链接的详细信息:
GET https://graph.microsoft.com/v1.0/drives/{drive-id}/root/children?$filter=share ne null&$expand=share
如果需要递归查询所有子文件夹的内容,加上$recursive=true(注意要改用search端点):
GET https://graph.microsoft.com/v1.0/drives/{drive-id}/root/search(q='*')?$filter=share ne null&$expand=share&$recursive=true
二、从用户起点查询被授予的共享链接
如果要找指定用户被共享的所有SharePoint内容,直接用sharedWithMe端点更高效,这个端点会返回所有共享给该用户的内容(包括OneDrive和SharePoint):
GET https://graph.microsoft.com/v1.0/me/drive/sharedWithMe?$expand=share
如果要查询其他用户,需要有对应权限,用用户ID替换me:
GET https://graph.microsoft.com/v1.0/users/{user-id}/drive/sharedWithMe?$expand=share
关键注意点
- 权限:需要
Files.Read.All/Sites.Read.All应用权限,或者Files.Read/Sites.Read委托权限,具体看你的使用场景。 - 分页:结果多的时候API会返回分页令牌,要通过
@odata.nextLink继续拉取后续内容。 - 性能:直接递归遍历文件夹可能慢,推荐用
search端点结合筛选的方式。
内容的提问来源于stack exchange,提问作者XChoopa
相关产品推荐
相关产品推荐

