如何使用Microsoft Graph API C# SDK查询网站集内的网站
使用Microsoft Graph API C# SDK查询网站集下的所有网站
前提准备
- 安装Microsoft Graph SDK NuGet包:
Install-Package Microsoft.Graph(.NET Framework)或dotnet add package Microsoft.Graph(.NET Core/.NET 5+) - 确保应用已配置Sites.Read.All权限(根据场景选择委派权限或应用权限,应用权限适合后台服务类场景)
实现步骤
1. 初始化GraphServiceClient
根据身份验证场景初始化客户端,以下是客户端凭据(应用权限)模式的示例:
using Microsoft.Graph; using Azure.Identity; var clientId = "你的应用注册ID"; var tenantId = "你的租户ID"; var clientSecret = "你的应用密钥"; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(credential);
2. 查询网站集下的所有子网站
你可以通过已掌握的网站集ID或webURL两种方式发起查询:
方式一:通过网站集ID直接查询
// 替换为目标网站集的ID var targetSiteCollectionId = "网站集ID"; var allSubSites = new List<Site>(); var sitesPage = await graphClient.Sites[targetSiteCollectionId].Sites.Request().GetAsync(); // 处理分页结果(子站点数量较多时Graph API会分页返回) allSubSites.AddRange(sitesPage.CurrentPage); while (sitesPage.NextPageRequest != null) { sitesPage = await sitesPage.NextPageRequest.GetAsync(); allSubSites.AddRange(sitesPage.CurrentPage); } // 遍历输出子站点信息 foreach (var site in allSubSites) { Console.WriteLine($"名称: {site.DisplayName}, ID: {site.Id}, 访问地址: {site.WebUrl}"); }
方式二:通过网站集webURL查询
如果只有webURL,先将其转换为Graph API可识别的站点标识符,再执行查询:
// 替换为目标网站集的webURL var siteCollectionWebUrl = "网站集的webURL"; var uri = new Uri(siteCollectionWebUrl); // 构造Graph API支持的站点标识符格式 var siteIdentifier = $"host/{uri.Host},path/{uri.AbsolutePath.TrimStart('/')}"; var allSubSites = new List<Site>(); var sitesPage = await graphClient.Sites[siteIdentifier].Sites.Request().GetAsync(); // 处理分页 allSubSites.AddRange(sitesPage.CurrentPage); while (sitesPage.NextPageRequest != null) { sitesPage = await sitesPage.NextPageRequest.GetAsync(); allSubSites.AddRange(sitesPage.CurrentPage); } // 输出结果 foreach (var site in allSubSites) { Console.WriteLine($"名称: {site.DisplayName}, ID: {site.Id}, 访问地址: {site.WebUrl}"); }
关键说明
- 权限适配:若使用委派权限(用户登录场景),需确保当前用户拥有目标网站集的访问权限,且应用已配置对应的委派权限
- 分页必要性:当网站集下子站点数量超过默认分页阈值时,必须循环处理
NextPageRequest才能获取全部数据 - 站点层级关系:网站集的根站点为顶级
Site对象,其下所有子站点均通过/sites/{site-id}/sites端点获取
内容的提问来源于stack exchange,提问作者A X
相关产品推荐
相关产品推荐

