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

C#中通过Client ID和Client Secret使用SharePoint REST API获取网站集与站点分类

基于客户端凭据的SharePoint REST API C#获取网站集及分类实现

前置权限配置

  • 确认已在Azure AD完成应用注册,为应用授予应用类型的Sites.Read.All权限,且已由全局管理员完成权限同意
  • 提前准备好租户对应的SharePoint基础域名(例如contoso.sharepoint.com),确认应用身份对租户SharePoint管理中心站点有访问权限

鉴权逻辑(可复用现有Graph鉴权的核心配置)

不需要重写鉴权框架,仅需要调整令牌请求的目标资源范围为SharePoint资源,即可完成带客户端凭据的身份校验,核心代码如下:

// 复用原有的Client ID、租户ID、客户端密钥参数构建机密客户端实例
IConfidentialClientApplication cca = ConfidentialClientApplicationBuilder
    .Create(c_Id)
    .WithTenantId(t_Id)
    .WithClientSecret(clientSecret)
    .Build();

// 调整令牌请求范围为当前租户的SharePoint资源,替换为实际租户域名
string[] sharePointScopes = new[] { $"https://{yourTenantDomain}.sharepoint.com/.default" };
var authResult = await cca.AcquireTokenForClient(sharePointScopes).ExecuteAsync();

核心REST调用实现

要获取全租户维度的网站集及关联分类属性,需要调用SharePoint管理中心站点下的搜索REST端点(直接调用普通站点的_api/web/webs接口仅能获取当前站点的子级站点,无法跨租户拉取全量站点),核心调用逻辑如下:

var httpClient = new HttpClient();
// 配置认证头与请求返回格式
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

// 构造请求地址,筛选全租户下的所有SharePoint站点,指定返回分类相关属性
var requestUrl = $"https://{yourTenantDomain}-admin.sharepoint.com/_api/search/query?" +
                 "querytext='contentclass:STS_Site'&" +
                 "selectproperties='Title,Path,SiteClassification,SiteComplianceTag,SiteDescription'&" +
                 "rowlimit=500";

// 发起请求并读取响应
var response = await httpClient.GetAsync(requestUrl);
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();

返回字段说明

  • Title:站点显示名称
  • Path:站点完整访问URL
  • SiteClassification:站点绑定的租户自定义分类标签
  • SiteComplianceTag:站点关联的敏感度/合规标签
  • SiteDescription:站点基础描述信息

落地注意事项

  • 全量分页处理:如果租户下站点总数超过单页返回上限,需要配合startrow参数循环拉取(例如第一页startrow=0,第二页startrow=500),直到返回结果数小于单页配置的rowlimit值,避免数据截断
  • 自定义分类适配:如果租户对站点分类做了自定义托管属性配置,需要将selectproperties中的属性名替换为实际配置的托管属性名,否则无法正确读取对应分类值
  • 权限校验:如果请求返回403错误,优先检查应用是否完成了应用级权限的管理员同意,确认应用身份没有被SharePoint的租户访问策略拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 02:27:03