You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过唯一ID搜索指定OneDrive共享文件夹(ASP.NET Core+MS Graph)

解决方案

要实现仅搜索你共享的「Company Files」文件夹,而非用户自身的OneDrive,你可以通过指定你的驱动器ID和目标文件夹ID精准限定搜索范围,具体操作如下:

1. 预先获取关键ID

先拿到两个核心标识:

  • 你的OneDrive驱动器ID:调用 GET /me/drive 即可获取(用Graph Explorer或测试代码都能查)
  • 「Company Files」文件夹ID:调用 GET /me/drive/root:/Company Files: 定位该文件夹,返回结果里的id就是文件夹ID

把这两个ID存在应用配置文件(比如appsettings.json)里,别硬编码在代码中。

2. 修改搜索代码

不再使用当前用户的Me.Drive.Root,直接指定你的驱动器和目标文件夹执行搜索:

// 从配置读取预存的ID
var yourDriveId = Configuration["OneDrive:YourDriveId"];
var companyFilesFolderId = Configuration["OneDrive:CompanyFilesFolderId"];

GraphServiceClient graphClient = new GraphServiceClient(authProvider);

var queryOptions = new List<QueryOption>()
{
    new QueryOption("select", "name,id,webUrl")
};

// 仅在指定文件夹内搜索
var searchResults = await graphClient.Drives[yourDriveId]
    .Items[companyFilesFolderId]
    .Search("document.docx")
    .Request(queryOptions)
    .GetAsync();

如果不想预先存文件夹ID,也可以通过路径动态定位:

var yourDriveId = Configuration["OneDrive:YourDriveId"];

// 先找到Company Files文件夹
var companyFilesFolder = await graphClient.Drives[yourDriveId]
    .Root
    .ItemWithPath("Company Files")
    .Request()
    .GetAsync();

// 再搜索该文件夹内的内容
var searchResults = await graphClient.Drives[yourDriveId]
    .Items[companyFilesFolder.Id]
    .Search("document.docx")
    .Request(queryOptions)
    .GetAsync();

3. 配置必要权限

在Azure AD应用注册页面,给应用添加Delegated权限:

  • 优先选Files.Read.Shared(最小权限,仅读取共享文件)
  • 也可以用Files.Read.All(允许读取所有文件,包括共享资源)

用户登录时,应用会请求这些权限,获取的令牌才能正常访问你共享的文件夹内容。

这样修改后,无论哪个用户登录,搜索范围都会严格限制在「Company Files」文件夹内,不会触及你的个人文件。

内容的提问来源于stack exchange,提问作者Qiuzman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:25:17