MSGraph搜索获取SharePoint文件@microsoft.graph.downloadUrl的方案
drive级search端点默认不会返回@microsoft.graph.downloadUrl这类实例注解属性,单轮Graph批处理最多支持20个请求,数百条搜索结果走多轮批处理的方案性能损耗过高,以下两个方案均无需多轮二次请求,可按业务场景选择:
方案1:改用统一搜索端点,单次请求直接返回目标属性
直接替换原有drive下的search端点,调用Microsoft Graph统一搜索接口,在请求参数中指定要返回的字段列表,即可单次请求拿到包含downloadUrl的完整文件信息,无需任何二次调用。
请求示例:
POST https://graph.microsoft.com/v1.0/search/query Content-Type: application/json { "requests": [ { "entityTypes": ["driveItem"], "query": { "queryString": "{SearchQuery} path:\"https://{租户前缀}.sharepoint.com/{目标文档库/共享路径}\"" }, "fields": [ "id", "name", "webUrl", "@microsoft.graph.downloadUrl", "parentReference", "size", "lastModifiedDateTime" ] } ] }
- 该端点单次请求最多支持返回1000条结果,支持标准Graph分页逻辑,通过
queryString中的path参数可以精准限定搜索范围到之前指定的DriveID对应的文档库/共享盘,搜索范围和原有端点完全一致 - 返回结果中
@microsoft.graph.downloadUrl为官方生成的带临时鉴权的下载链接,无需额外传令牌即可直接访问,适合需要对外分发下载链接的场景
方案2:保留现有搜索逻辑,零额外请求构造等效下载链接
如果不想改动现有搜索逻辑,可以直接基于搜索结果中已返回的字段构造等效下载链接,完全不需要额外调用Graph接口。
下载链接构造格式:
https://{租户前缀}.sharepoint.com/_api/v2.0/drives/{DriveID}/items/{ItemID}/content
该链接和Graph接口返回的
@microsoft.graph.downloadUrl权限逻辑完全一致:请求时携带合法的Graph访问令牌即可直接下载对应文件,相比官方返回的临时链接少了一次跳转,下载响应速度更快。
- 构造链接所需的
DriveID可直接从搜索结果每条条目的parentReference.driveId字段获取,ItemID为搜索结果条目的自带id字段,所有字段在当前使用的搜索端点响应中默认就会返回,零额外接口开销,哪怕搜索结果返回数千条文件也不会增加请求量 - 该方案构造的链接需要携带访问令牌访问,适合应用内部服务/客户端带授权调用下载的场景
内容的提问来源于stack exchange,提问作者Muscii
相关产品推荐
相关产品推荐

