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

如何使用MSGraph .Net SDK /sites端点搜索参数获取租户全部SPO站点

实现方案(基于Microsoft Graph .NET SDK v5.x,当前主流稳定版)

前提条件

  • 已在Azure应用注册中配置应用级权限 Sites.Read.All 或 Sites.ReadWrite.All,且已获取租户管理员同意
  • 已通过Nuget安装依赖包:Microsoft.Graph、Azure.Identity

完整代码示例

using Azure.Identity;
using Microsoft.Graph;
using Microsoft.Graph.Models;

// 1. 初始化Graph客户端(示例为后台服务常用的客户端凭证流)
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "替换为你的租户ID";
var clientId = "替换为你的应用注册客户端ID";
var clientSecret = "替换为你的应用注册客户端密钥";

var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(credential, scopes);

// 2. 构造带search=*参数的站点查询请求
var allSites = new List<Site>();
var requestInfo = graphClient.Sites.ToGetRequestInformation(config =>
{
    config.QueryParameters.Search = "*";
    config.QueryParameters.Top = 200; // 单页最大返回条数,官方上限为200
});
// 适配search参数的URL模板规则
requestInfo.UrlTemplate += "?%24search={%24search}";

// 3. 自动分页拉取全量站点数据
var pageIterator = PageIterator<Site, SiteCollectionResponse>.CreatePageIterator(
    graphClient,
    await graphClient.RequestAdapter.SendAsync(requestInfo, SiteCollectionResponse.CreateFromDiscriminatorValue),
    site =>
    {
        allSites.Add(site);
        return true; // 迭代所有页面,返回false可提前终止
    }
);
await pageIterator.IterateAsync();

// 4. 结果验证
Console.WriteLine($"共获取到{allSites.Count}个SPO站点");
foreach (var site in allSites)
{
    Console.WriteLine($"站点名:{site.DisplayName},访问地址:{site.WebUrl}");
}

如果你使用的是v4版本旧SDK,可参考以下简化写法

var queryOptions = new List<QueryOption>
{
    new QueryOption("search", "*"),
    new QueryOption("$top", "200")
};
var sitesPage = await graphClient.Sites.Request(queryOptions).GetAsync();
var allSites = new List<Site>();
// 手动处理分页
while (sitesPage.Count > 0)
{
    allSites.AddRange(sitesPage);
    if (sitesPage.NextPageRequest == null) break;
    sitesPage = await sitesPage.NextPageRequest.GetAsync();
}

注意事项

  • 不要使用委派权限调用该接口,仅能获取当前登录用户有权限访问的站点,无法拉取全租户站点
  • 默认查询不会返回用户个人OneDrive站点,如有需要需额外调整查询逻辑
  • 站点量级过万的租户建议添加请求重试逻辑,避免触发接口限流

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:24:04