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

如何用C#设置SharePoint Online站点锁定状态?权限及Graph API方案

问题解答

1. "Token request failed" 错误原因分析

  • 站点URL错误:GetSitePropertiesByUrl要求传入目标站点的常规访问URL(比如https://<domain>.sharepoint.com/sites/{site-name}),你当前用的https://<domain>-admin.sharepoint.com/sites/{site key}是管理员站点路径,不符合接口要求,会直接导致令牌请求失败。
  • 权限不足:应用注册未配置足够的租户级操作权限,无法访问租户管理相关接口。
  • ACS配置遗漏:若采用ACS身份验证,需确保已在SharePoint管理中心完成应用的API权限授予操作。

2. PnP Framework 更新LockState所需权限

需为Azure AD应用注册配置以下权限(均需全局管理员同意):

  • SharePoint应用权限:Sites.FullControl.All(或更精细的Tenant.ReadWrite.All),用于修改租户级站点属性。
  • 若使用ACS身份验证,额外需在SharePoint管理中心的API访问页面,为应用授予租户级的"读取和写入所有网站"权限。

3. 用Graph API/GraphServiceClient实现的方案

完全可以通过Graph API替代PnP Framework完成操作,具体如下:

所需权限

为Azure AD应用注册添加Graph应用权限:Sites.Manage.All(需管理员同意)。

C#代码示例

using Microsoft.Graph;
using Azure.Identity;

// 替换为你的实际参数
var tenantId = "<你的租户ID>";
var clientId = "<你的应用客户端ID>";
var clientSecret = "<你的应用客户端密钥>";
var siteRelativePath = "/sites/{site-name}";
var siteDomain = "<domain>.sharepoint.com";
var setToReadOnly = true;

// 初始化Graph客户端
var graphClient = new GraphServiceClient(new ClientSecretCredential(
    tenantId,
    clientId,
    clientSecret
));

// 先通过URL获取站点ID
var site = await graphClient.Sites.GetByPath(siteRelativePath, siteDomain)
    .Request()
    .GetAsync();

// 更新站点LockState
var updateBody = new Site
{
    LockState = setToReadOnly ? "readOnly" : "unlock"
};

await graphClient.Sites[site.Id]
    .Request()
    .UpdateAsync(updateBody);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:56:10