Microsoft Graph 为特定人员创建共享 link

Microsoft Graph create share link for specific people

我想通过 link 在 Microsoft 图形代码的共享点中共享文档。默认行为是每个拥有 link 的人都可以看到此文件。我想让这个 link 只为特定的人工作。

所以我的代码是这样的:

Permission permission = await _graphClient.Sites[_options.SiteId]
                        .Drives[driveId]
                        .Items[itemId]
                        .CreateLink("view", "organization")
                        .Request()
                        .PostAsync();

这为组织中的所有人创建共享 link。现在我想授予权限 (https://docs.microsoft.com/en-us/graph/api/permission-grant?view=graph-rest-1.0&tabs=csharp)

await graphClient.Shares["{sharedDriveItem-id}"].Permission
    .Grant(roles,recipients)
    .Request()
    .PostAsync();

但我不知道“{sharedDriveItem-id}”应该放什么。当我把 itemId 放在那里时,它不起作用。另外,如果我把 permission.link.webUrl 放在那里,它也不起作用。

我做错了什么?

由此documentation.

创建共享 link 响应对象 returns id 后,您应该使用它来代替 {sharedDriveItem-id}。请参阅下面的类似响应对象。

HTTP/1.1 201 Created
Content-Type: application/json
{
  "id": "123ABC", // this is the sharedDriveItem-id
  "roles": ["write"],
  "link": {
    "type": "view",
    "scope": "anonymous",
    "webUrl": "https://1drv.ms/A6913278E564460AA616C71B28AD6EB6",
    "application": {
      "id": "1234",
      "displayName": "Sample Application"
    },
  },
  "hasPassword": true
}

好的,我找到了解决方案。有几个步骤:

  1. As sharedDriveItem-id 我使用编码后的 webUrl 遵循这条指令 https://docs.microsoft.com/en-us/graph/api/shares-get?view=graph-rest-1.0&tabs=http
  2. 当我在适当的范围内创建 link (https://docs.microsoft.com/en-us/graph/api/driveitem-createlink?view=graph-rest-1.0&tabs=http) 时,我放置了“用户”- 文档中没有类似的选项,但没有它就不起作用
  3. 我在 header https://docs.microsoft.com/en-us/graph/api/driveitem-createlink?view=graph-rest-1.0&tabs=http
  4. 中添加了 Prefer
  5. 我正在使用 clientSecret/clientId 授权,所以我必须在 Graph Api Permissions
  6. 中添加对 Sites.Manage.All 和 Sites.FullControl.All 的 Azure 应用程序访问权限

一切正常如果你在最新版本中使用 Microsoftg.Graph nuget(如果我没记错的话现在是 4.3)