共享点休息 api GetFolderById returns System.IO.FileNotFoundException

share point rest api GetFolderById returns System.IO.FileNotFoundException

我正在使用共享点 rest api 从共享点库中获取文件和文件夹。我有两个库(带有 GUID),这是我正在使用的 api 端点:

/_api/web/GetFolderById('{$guid}')?$expand=Folders,Files

api returns 所有文件夹和文件都符合第一个库 guid 库的预期,但问题是第二个 returns 这个错误即使我使用的是文件夹端点:

{
    "error": {
        "code": "-2147024894, System.IO.FileNotFoundException",
        "message": {
            "lang": "en-EN",
            "value": "File Not Found."
        }
    }
}

我还使用了具有相对文件夹路径的 getfolderbyserverrelativeurl 端点。此端点 returns 第一个文件夹的预期结果,但第二个文件夹的此错误:

{
    "error": {
        "code": "-2147024891, System.UnauthorizedAccessException",
        "message": {
            "lang": "en-EN",
            "value": "Access denied. You do not have permission to perform this action or access this resource."
        }
    }
}

请注意,我可以使用相同的凭据(usernamepassword)查看 Web 中的第二个文件夹。

所以这是我的问题:是否有另一种方法可以使用共享点 rest api 获取所有文件和文件夹?如果不是,我的方法有什么错误?

您可以使用此端点获取库中的所有子文件夹,然后找到文件夹唯一 ID:

/_api/web/Lists/GetByTitle('Documents')/rootFolder/Folders?$expand=ListItemAllFields

像下面这样在 GetFolderById 中使用这个唯一的 Id,在我这边有效:

/_api/web/GetFolderById('6a7de691-321a-41e9-8927-5594082d5a94')?$expand=文件夹,文件

网站集 api 端点的路由与主站点不同。例如,如果您想访问网站集 B 中的文件夹 A,则必须使用此端点获取根文件夹 GUID:

http://sitename/sites/collection_name/_api/web/lists(guid'7EA06E82-C7C1-41FE-AF8B-C3341E928D6A')/rootFolder

然后将此端点​​与根文件夹 GUID 一起使用以获取所有文件和文件夹:

http://sitename/sites/collection_name/_api/web/GetFolderById('26728694-ee8e-4618-a524-5ea6ba545384')?$expand=Folders/ListItemAllFields,Files/ListItemAllFields