1

我想通过 Microsoft 图形代码的 sharepoint 中的链接共享文档。默认行为是每个拥有链接的人都可以看到这个文件。我想让这个链接只适用于特定的人。

所以我的代码如下所示:

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

这将为组织中的所有人创建共享链接。现在我想授予权限(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 放在那里,它也不起作用。

我究竟做错了什么?

4

2 回答 2

0

从这个文档

创建共享链接后,响应对象会返回一个 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
}
于 2021-08-24T05:55:50.013 回答
0

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

  1. 作为sharedDriveItem-id,我在此指令之后使用了编码的webUrl https://docs.microsoft.com/en-us/graph/api/shares-get?view=graph-rest-1.0&tabs=http
  2. 当我在适当的范围内创建链接(https://docs.microsoft.com/en-us/graph/api/driveitem-createlink?view=graph-rest-1.0&tabs=http)时,我将“用户”放在了文档中没有类似的选项,但没有它就不起作用
  3. 我在标题中添加了 Prefer https://docs.microsoft.com/en-us/graph/api/driveitem-createlink?view=graph-rest-1.0&tabs=http
  4. 我正在使用 clientSecret/clientId 授权,因此我必须在 Graph Api Permissions 中添加对 Sites.Manage.All 和 Sites.FullControl.All 的 azure 应用访问权限

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

于 2021-08-26T07:26:00.707 回答