使用Microsoft Graph API SDK 4.x获取OneDrive搜索文件的关键词相关内容
解决方案:OneDrive搜索获取内容片段及超时问题处理
一、当前API无法返回内容片段的原因
你使用的/drives/{drive-id}/root/search接口仅返回文件元数据(名称、路径、修改时间等),不会包含文件内容的关键词片段或高亮信息,确实用错了API。
二、正确获取内容片段的方案:全局搜索接口
要获取带搜索关键词的内容片段,需使用Microsoft Graph的全局搜索接口/search/query,该接口支持搜索OneDrive内容,并返回带关键词高亮的内容片段(hitHighlights字段)。
1. SDK 4.x代码示例
var searchRequest = new SearchRequestObject { Query = new SearchQuery { QueryString = searchQuery // 你的搜索关键词,例如"项目计划" }, From = 0, Size = 20, Sources = new List<string> { "driveItems" } // 指定仅搜索OneDrive文件 }; var searchResults = await graphServiceClient .Search .Query(searchRequest) .Request() .GetAsync(); // 提取内容片段与高亮信息 foreach (var result in searchResults.Value) { if (result.HitHighlights != null) { foreach (var highlight in result.HitHighlights) { // highlight.Value 为带<mark>标记的高亮片段,例如"这是<mark>项目</mark>计划文档" Console.WriteLine(highlight.Value); } } // 获取文件元数据 var driveItem = result.Resource as DriveItem; if (driveItem != null) { Console.WriteLine($"文件名:{driveItem.Name}"); } }
2. Graph Explorer HTTP请求示例
POST https://graph.microsoft.com/v1.0/search/query Content-Type: application/json { "query": { "queryString": "你的搜索关键词" }, "from": 0, "size": 20, "sources": ["driveItems"] }
返回结果中的hitHighlights字段包含带<mark>标签的高亮内容片段,可直接提取用于展示。
三、解决请求文件内容超时的问题
你直接调用/drives/{driveId}/Items/{fileId}/Content获取的是文件完整二进制内容,大文件极易触发超时。若仅需内容片段,优先使用全局搜索接口,无需读取完整文件。
若确实需要读取小文件内容,可设置超时参数:
var searchResults = await graphServiceClient .Drives[driveId] .Items[fileId] .Content .Request() .WithTimeout(TimeSpan.FromMinutes(5)) // 设置更长超时时间 .GetAsync();
内容的提问来源于stack exchange,提问作者손동진
相关产品推荐
相关产品推荐

