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 放在那里,它也不起作用。
我做错了什么?
创建共享 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
}
好的,我找到了解决方案。有几个步骤:
- As sharedDriveItem-id 我使用编码后的 webUrl 遵循这条指令 https://docs.microsoft.com/en-us/graph/api/shares-get?view=graph-rest-1.0&tabs=http
- 当我在适当的范围内创建 link (https://docs.microsoft.com/en-us/graph/api/driveitem-createlink?view=graph-rest-1.0&tabs=http) 时,我放置了“用户”- 文档中没有类似的选项,但没有它就不起作用
- 我在 header https://docs.microsoft.com/en-us/graph/api/driveitem-createlink?view=graph-rest-1.0&tabs=http
中添加了 Prefer
- 我正在使用 clientSecret/clientId 授权,所以我必须在 Graph Api Permissions
中添加对 Sites.Manage.All 和 Sites.FullControl.All 的 Azure 应用程序访问权限
一切正常如果你在最新版本中使用 Microsoftg.Graph nuget(如果我没记错的话现在是 4.3)
我想通过 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 放在那里,它也不起作用。
我做错了什么?
创建共享 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
}
好的,我找到了解决方案。有几个步骤:
- As sharedDriveItem-id 我使用编码后的 webUrl 遵循这条指令 https://docs.microsoft.com/en-us/graph/api/shares-get?view=graph-rest-1.0&tabs=http
- 当我在适当的范围内创建 link (https://docs.microsoft.com/en-us/graph/api/driveitem-createlink?view=graph-rest-1.0&tabs=http) 时,我放置了“用户”- 文档中没有类似的选项,但没有它就不起作用
- 我在 header https://docs.microsoft.com/en-us/graph/api/driveitem-createlink?view=graph-rest-1.0&tabs=http 中添加了 Prefer
- 我正在使用 clientSecret/clientId 授权,所以我必须在 Graph Api Permissions 中添加对 Sites.Manage.All 和 Sites.FullControl.All 的 Azure 应用程序访问权限
一切正常如果你在最新版本中使用 Microsoftg.Graph nuget(如果我没记错的话现在是 4.3)