首页 文章

无法通过REST API访问OneDrive中与用户共享的文件夹内容

提问于
浏览
0

我们有一个Windows客户端应用程序,它通过Graph REST API与OneDrive集成 . 最近,我们开始添加对与当前用户共享的内容的支持,特别是文件夹 . 我们可以访问这些项目:

GET https://graph.microsoft.com/v1.0/me/drive/sharedWithMe

但是在访问返回的项目时遇到了问题 . 当我尝试:

GET https://graph.microsoft.com/v1.0/drives/RemoteDriveID/items/RemoteItemID/children

我用"The resource could not be found."得到404错误当我尝试将远程站点ID放在那里时(只有站点ID和三联描述here)以这种格式:

GET https://graph.microsoft.com/v1.0/sites/RemoteSiteID/drives/RemoteDriveID/items/RemoteItemID

我收到400错误,“提供的ID不适合当前主机” . 我正在使用的所有ID都来自remoteItem facet,根据文档 . 我们的应用程序具有Files.ReadWrite.All和Sites.ReadWrite.All权限 . 对服务器的所有其他调用都有效,因此它不是OAuth或基本请求问题 . 从其他帖子看,似乎其他人要么没有这个问题,要么从来没有解决他们的问题 .

我们的最终目标是与用户共享一个文件夹,以便我们的应用程序同步内容 .

1 回答

  • 0

    你问@JackHunsinger已经有一段时间了,但fwiw文件夹共享方案对我有用 .

    我正在使用为用户A获取的访问令牌,并使用如下请求创建共享权限:

    POST https://graph.microsoft.com/v1.0/drives/<driveId>/items/<folderId>/invite
    Content-type: application/json
    {
        {
            "recipients":
            [
              { "email": "<user B email>" }
            ],
            "requireSignIn": true,
            "roles": [ "write" ]
        }
    }
    

    回复此回复:

    {
        {
    
       "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(permission)",
            "value":
            [
                {
                    "@odata.type": "#microsoft.graph.permission",
                    "id": "<permissionId>",
                    "roles": [ "write" ],
                    "shareId": "<shareId>",
                    "grantedTo":
                    {
                        "user": { "displayName": "<user B>", "id":"<user B id>" }
                    },
                    "invitation":
                    {
                        "email": "<user B email>",
                        "signInRequired": true,
                        "invitedBy": { "user": { "id": "<user B email>" } }
                    },
                    "link": { "webUrl": "https://1drv.ms/u/s!<shareId>" }
                }
            ]
        }
    }
    

    之后,用户B正在检索文件夹内容,如:

    GET https://graph.microsoft.com/v1.0/drives/<driveId>/items/<folderId>?$expand=children
    

    其中 driveIdfolderId 在两个请求中都相同 . 即用户B正在使用 remoteItem facet,就像它写在问题中一样 .

    也许比较上述权限json与你得到的,将帮助你追踪你的问题:-)

    如果您的应用未创建权限,您可能会发现通过以用户A发送此权限来检查相关文件夹的权限很有用:

    GET https://graph.microsoft.com/v1.0/drives/<driveId>/items/<folderId>/permissions
    

    好奇心(可能对@DanSilver有趣......):

    • 顺便说来,似乎有点奇怪, <user B email> 在许可下显示 "invitedBy" - 我希望看到 <user A email> 那里......

    • 值得注意的是 - 我认为 - 与其他OneDrive用户共享并不真正需要 shareId . 它仅用于 /shares endpoints ,它似乎只能读取 .

相关问题