使用MS Graph查询API在OneDrive搜索文件遇问题求助
问题分析与解决方案
1. Query API 调用错误
你使用的 /me/drive/root:/Brendan:/children/query 端点不存在,这是触发 itemNotFound 错误的直接原因——Microsoft Graph 中没有针对 children 集合的 query 子端点。
要在指定目录内搜索文件,正确做法是使用目录项的**search 专用端点**,请求格式如下:
GET https://graph.microsoft.com/v1.0/me/drive/root:/Brendan:/search(q='bren')
该端点会返回目标目录下名称或内容包含关键词 bren 的所有文件。
如果需要使用批量查询(即你尝试的多请求格式),应调用根级 /query 端点,并在请求中指定目标目录的搜索路径,示例请求体:
{ "requests": [ { "url": "/me/drive/root:/Brendan:/search(q='bren')", "method": "GET" } ] }
2. $filter 功能限制
OneDrive 对 driveItem 集合的 $filter 有严格限制:仅 startswith(name, 'xxx') 是官方支持的过滤条件,endswith 和 contains 并不被支持,因此调用这两个条件时会返回 itemNotFound 错误。
替代方案:
- 使用前文提到的
search端点实现模糊匹配 - 先获取目录下所有文件(
/me/drive/root:/Brendan:/children),再在本地进行endswith或contains过滤
3. $search 参数使用错误
$search 参数不能直接附加在 /children 端点后,该端点不支持此参数,因此请求会忽略 $search 并返回全部文件。
正确的搜索方式是使用目录的 search 专用端点:
// 搜索名称包含bren1.txt的文件 GET https://graph.microsoft.com/v1.0/me/drive/root:/Brendan:/search(q='bren1.txt') // 按名称精确匹配(结合搜索语法) GET https://graph.microsoft.com/v1.0/me/drive/root:/Brendan:/search(q='name:"bren1.txt"')
内容的提问来源于stack exchange,提问作者bcperth
相关产品推荐
相关产品推荐

