You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft Graph API v5(.NET SDK)无法获取SharePoint站点所有列表

解决Microsoft Graph API v5 .NET SDK获取SharePoint全部列表的问题

问题1:仅返回50个列表的解决方案

Graph API默认分页大小为50条,即便nextLink返回null,也可能是API返回逻辑导致未触发下一页标记,但实际仍有未返回的数据。要获取全部列表,需手动处理分页逻辑,或设置更大的$top参数(API单页上限通常为1000)。

方案1:使用SDK的PageIterator自动处理分页

这是Kiota(Graph v5 SDK基于Kiota)推荐的分页遍历方式,可自动处理所有分页结果:

var graphClient = GetGraphClient();
var allLists = new List<List>();

var initialRequest = graphClient.Sites[siteId].Lists.GetAsync((config) =>
{
    config.QueryParameters.Expand = new string[] { "drive" };
    config.QueryParameters.Select = new string[] { "system", "*" };
    config.QueryParameters.Top = 1000; // 设置单页最大返回数
});

var pageIterator = PageIterator<List, ListCollectionResponse>.CreatePageIterator(
    graphClient.RequestAdapter,
    await initialRequest,
    (list) =>
    {
        allLists.Add(list);
        return true; // 继续遍历下一项
    },
    (response) =>
    {
        // 生成下一页请求(如果存在)
        if (!string.IsNullOrEmpty(response.OdataNextLink))
        {
            return graphClient.Sites[siteId].Lists.WithUrl(response.OdataNextLink).GetAsync();
        }
        return Task.FromResult<ListCollectionResponse>(null);
    }
);

await pageIterator.IterateAsync();

// allLists 现在包含站点所有列表

若不想使用PageIterator,可手动检查并请求下一页:

var graphClient = GetGraphClient();
var allLists = new List<List>();
ListCollectionResponse currentResult = null;

do
{
    currentResult = currentResult == null 
        ? await graphClient.Sites[siteId].Lists.GetAsync((config) =>
        {
            config.QueryParameters.Expand = new string[] { "drive" };
            config.QueryParameters.Select = new string[] { "system", "*" };
            config.QueryParameters.Top = 1000;
        })
        : await graphClient.Sites[siteId].Lists.WithUrl(currentResult.OdataNextLink).GetAsync();

    if (currentResult.Value != null)
    {
        allLists.AddRange(currentResult.Value);
    }

} while (!string.IsNullOrEmpty(currentResult?.OdataNextLink));

// allLists 包含全部列表

问题2:启用注释行导致400错误的原因

你注释的代码手动修改了UrlTemplate,这是错误操作:

//requestInformation.UrlTemplate = requestInfo.UrlTemplate.Insert(requestInfo.UrlTemplate.Length - 1, ",%24select,%24expand");

Kiota生成的UrlTemplate遵循固定格式(包含{siteId}等占位符),手动插入%24select,%24expand会破坏URL结构,导致服务器返回400(请求格式错误)。正确方式是通过QueryParameters.Add添加参数,同时你的代码存在语法错误,修正后应为:

requestInformation.QueryParameters.Add("%24select", "system,*");
requestInformation.QueryParameters.Add("%24expand", "drive");

内容的提问来源于stack exchange,提问作者user15854784

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:55:20