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

调用Microsoft Graph API获取共享资源报错"请求格式错误"如何解决

报错根因
  • Microsoft Graph 的 /shares 端点本身没有设计全局列表查询能力,该接口仅支持传入编码后的共享链接或共享资源ID,查询单个指定共享的元数据。你直接调用 _graphClient.Shares.Request().GetAsync() 本质是发送了无参数的 GET /shares 请求,该路由不存在,因此返回请求格式错误。
  • 你其他drives、sites等接口调用正常,说明权限配置没有问题,和权限无关。
正确查询共享资源的方案

根据你的使用场景选择对应实现方式:

场景1:查询当前登录用户收到的所有共享资源

调用sharedWithMe接口即可,对应C#代码如下:

GraphServiceClient _graphClient = new GraphServiceClient(myAuthProvider);
// 拉取当前用户被共享的所有资源
var sharedItems = await _graphClient.Me.Drive.SharedWithMe().Request().GetAsync();

// 若资源数量较多需要分页拉取全部结果,处理返回值中的 nextLink 即可
while (sharedItems.NextPageRequest != null)
{
    var nextPage = await sharedItems.NextPageRequest.GetAsync();
    sharedItems.AddRange(nextPage);
}

如果是无用户登录的后台应用权限场景,指定对应用户ID即可:

var sharedItems = await _graphClient.Users["目标用户ID"].Drive.SharedWithMe().Request().GetAsync();

场景2:租户管理员查询全租户所有共享资源

Microsoft Graph没有提供单接口直接拉取全租户共享资源的能力,需要按以下步骤实现:

  1. 分别拉取租户内所有用户、所有SharePoint站点列表
  2. 遍历每个用户/站点对应的驱动器,调用搜索接口筛选共享项:
// 示例:查询指定驱动器下的所有共享项
var sharedItemsInDrive = await _graphClient.Drives["目标驱动器ID"].Root.Search("shared").Request().GetAsync();

使用该方案前需要确保应用已经配置了对应站点、用户驱动器的读取权限,且已经完成管理员同意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:36:03