访问共享 DriveItem

通过使用 shareId 或共享 URL 访问共享 DriveItem 或共享项目集合。

要与此 API 一起使用共享 URL,你的应用需要 将此 URL 转换为共享令牌

先决条件

要执行此 API,需要以下范围之一:

  • Files.ReadWrite

HTTP 请求

GET /shares/{sharingIdOrUrl}

请求正文

请勿提供此方法的请求正文。

响应

如果成功,此方法在响应正文中返回 200 OK 响应代码和 sharedDriveItem 资源。

示例

请求

下面是一个请求检索共享项目的示例:

GET https://graph.microsoft.com/v1.0/shares/{shareIdOrUrl}
响应

下面是一个响应示例。

HTTP/1.1 200 OK
Content-type: application/json

{
  "id": "B64397C8-07AE-43E4-920E-32BFB4331A5B",
  "name": "contoso project.docx",
  "owner": {
    "user": {
      "id": "98E88F1C-F8DC-47CC-A406-C090248B30E5",
      "displayName": "Ryan Gregg"
    }
  }
}

直接访问共享项目

虽然 SharedDriveItem 包含一些有用的信息,但大多数应用程序都需要直接访问共享 DriveItemSharedDriveItem 资源包括项目关系,这些关系可以访问共享项目范围内的内容。

示例(单个文件)

请求

通过请求关系,将返回共享的 DriveItem

GET https://graph.microsoft.com/v1.0/shares/{shareIdOrUrl}/root
响应
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": "9FFFDB3C-5B87-4062-9606-1B008CA88E44",
  "name": "contoso project.docx",
  "eTag": "2246BD2D-7811-4660-BD0F-1CF36133677B,1",
  "file": {},
  "size": 109112
}

示例(共享文件夹)

请求

通过请求关系并展开集合,将同时返回共享的 DriveItem 以及共享文件夹内的文件。

GET https://graph.microsoft.com/v1.0/shares/{shareIdOrUrl}/root?$expand=children
响应
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": "9FFFDB3C-5B87-4062-9606-1B008CA88E44",
  "name": "Contoso Project",
  "eTag": "2246BD2D-7811-4660-BD0F-1CF36133677B,1",
  "folder": {}
  "size": 10911212,
  "children": [
    {
      "id": "AFBBDD79-868E-452D-AD4D-24697D4A4044",
      "name": "Propsoal.docx",
      "file": {},
      "size": 19001
    },
    {
      "id": "A91FE90A-2F2C-4EE6-B412-C4FFBA3F71A6",
      "name": "Update to Proposal.docx",
      "file": {},
      "size": 91001
    }
  ]
}

转换共享 URL

若要使用共享 API 访问共享 URL,需要将 URL 转换为共享令牌。

要将 URL 转换为共享令牌:

  1. Base64 编码共享 URL。
  2. 通过以下方法将 base64 编码数据转换为未填充的 base64url 格式
    1. 从该字符串中剪裁尾随 = 字符
    2. 将不安全的 URL 字符替换为等效字符;将 / 替换为 _,将 + 替换为 -
  3. u! 附加到字符串的开头。

例如,以下 C# 方法将输入字符串转换为共享令牌:

string UrlToSharingToken(string inputUrl) {
  var base64Value = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(inputUrl));
  return "u!" + base64Value.TrimEnd('=').Replace('/','_').Replace('+','-');
}