无法使用 SharePoint REST API 列出文件夹

问题描述 投票:0回答:2

基于 Microsoft Sharepoint 此处文档 我正在尝试使用 REST API 列出我的 Sharepoint 应用程序文档库和文件夹。

我尝试使用 Java 使用 apache HTTP 客户端并使用 Postman,这两种方式都失败,状态代码 400 和错误消息:值未落在预期范围内。

以下是响应错误消息:

<?xml version="1.0" encoding="utf-8"?>
<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <m:code>-2147024809, System.ArgumentException</m:code>
    <m:message xml:lang="en-US">Value does not fall within the expected range.</m:message>
</m:error>

这是邮递员的截图:

我正在使用 NTLM 身份验证

这是我的java代码示例(测试用例):

@Test
public void testListFolders() {
    // SharePoint site URL and API endpoint
    String siteUrl = "http://sharepoint2013.MY_SITE_NAME.com/sites/home";
    String apiEndpoint = "/_api/web/GetFolderByServerRelativeUrl('/Shared%20Documents')/Folders";

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(AuthScope.ANY),
            new NTCredentials(String.join(":", "MY_USERNAME", "MY_PASSWORD")));

    RequestConfig defaultRequestConfig = RequestConfig.custom()
            .setExpectContinueEnabled(false)
            .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
            .setProxyPreferredAuthSchemes(Collections.singletonList(AuthSchemes.BASIC))
            .build();

    // Create HttpClient instance
    CloseableHttpClient httpClient = HttpClients.custom()
                                                .setDefaultCredentialsProvider(credsProvider)
                                                .setDefaultRequestConfig(defaultRequestConfig)
                                                .build();
    // Create HTTP GET request
    HttpGet request = new HttpGet(siteUrl + apiEndpoint);
    request.setHeader(HttpHeaders.ACCEPT, "application/json;odata=verbose");

    try {
        // Execute the request
        HttpResponse response = httpClient.execute(request);
        System.out.println("Status code: " + response.getStatusLine().getStatusCode());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            httpClient.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

状态代码始终为 400,并且错误消息与 Postman 形式相同。

如果我将此测试用例的端点替换为列出 Sharepoint 列表的端点:

/_api/web/Lists/?$Select=Title%2CIsApplicationList%2CContentTypesEnabled%2CHidden%2CBaseType%2CItemCount%2CIsCatalog&$Filter=BaseType%20eq%200%20and%20Hidden%20eq%20false
它将正常工作并返回有效的响应和状态代码 200

  • 我是否缺少列出文件夹的特定标题 使用 REST API 的 Sharepoint?
  • 或者有一些权限或者 我需要从 Sharepoint 应用程序设置/启用配置吗?
  • 或者我正在执行的代码/请求有问题吗?
java rest sharepoint sharepoint-online
2个回答
0
投票

为此您可能需要单独的 API 调用。您可以使用

'_api/web/lists'
端点获取列表/文档库。然后,对于每个列表,您可以点击
'list/getbytitle('listname')/items'
端点来获取列表的项目。 这里的问题是,您可以使用过滤器参数来仅获取文件夹,即 '$filter= 'FileSystemObjectType = 1'。这应该只返回响应中的文件夹。


0
投票

您可以使用以下api来获取列表下的项目

/sites/xxx.sharepoint.com,{siteid}/lists/{listid}/drive/root/children
© www.soinside.com 2019 - 2024. All rights reserved.