如何用C#/.NET移除SharePoint网站集用户?现有代码无法运行
针对你提供的移除用户代码无法运行的问题,以下是问题分析和修复后的实现:
核心问题点
- 未调用
SPWeb.Update()保存移除操作的更改 - 未检查用户是否存在,直接调用
Remove可能抛出异常 - 多次重复获取
RootWeb,可以复用已声明的对象 - 若在非POST上下文运行,需要开启
AllowUnsafeUpdates避免权限拦截
修复后的代码
private void RemoveUser(string userLoginName) { using (SPSite siteCollection = new SPSite("http://serverName")) { using (SPWeb rootWeb = siteCollection.RootWeb) { // 开启不安全更新,允许非POST上下文修改网站内容 rootWeb.AllowUnsafeUpdates = true; SPUserCollection allUsers = rootWeb.AllUsers; // 先验证用户存在性,避免抛出异常 if (allUsers.Contains(userLoginName)) { allUsers.Remove(userLoginName); // 必须调用Update保存更改 rootWeb.Update(); } // 关闭不安全更新,恢复默认安全设置 rootWeb.AllowUnsafeUpdates = false; } } }
关键注意事项
- 用户标识格式:必须传入完整的用户登录名,格式如
domain\username,基于声明的环境需使用对应Claims格式(例如i:0#.w|domain\username) - 权限要求:代码运行上下文必须具备网站集管理员权限,否则会触发权限异常
- 适用范围:此代码仅适用于SharePoint Server(经典本地部署),SharePoint Online需使用Microsoft Graph或SharePoint CSOM的
User.DeleteObject()方法 - 安全规范:操作完成后务必关闭
AllowUnsafeUpdates,避免网站暴露安全风险
内容的提问来源于stack exchange,提问作者Sridhar
相关产品推荐
相关产品推荐

