如何用C#控制台程序获取SharePoint Online站点的所有列表与库?
准备工作
首先需要安装SharePoint Online CSOM的NuGet包,在Package Manager控制台执行:
Install-Package Microsoft.SharePointOnline.CSOM
完整代码实现
以下是直接可用的控制台程序代码,包含连接认证、获取所有列表/库并输出关键信息的逻辑:
using System; using System.Security; using Microsoft.SharePoint.Client; namespace SPOListRetriever { class Program { static void Main(string[] args) { // 配置SPO站点信息 string siteUrl = "https://yourtenant.sharepoint.com/sites/yourSite"; string userName = "youruser@yourtenant.onmicrosoft.com"; string password = "yourpassword"; // 将密码转换为SecureString var securePassword = new SecureString(); foreach (char c in password) { securePassword.AppendChar(c); } // 初始化客户端上下文 using (var context = new ClientContext(siteUrl)) { // 使用账号密码认证 context.Credentials = new SharePointOnlineCredentials(userName, securePassword); try { // 获取当前站点的Web对象 Web web = context.Web; // 加载Web下的所有列表集合,指定需要的属性 context.Load(web.Lists, lists => lists.Include( list => list.Title, list => list.BaseTemplate, list => list.DefaultViewUrl)); // 执行请求 context.ExecuteQuery(); // 遍历并输出所有列表/库 Console.WriteLine("站点下所有列表与库:"); Console.WriteLine("----------------------------------------"); foreach (List list in web.Lists) { // 通过BaseTemplate区分列表类型 string listType = list.BaseTemplate switch { 100 => "普通列表", 101 => "文档库", 102 => "事件列表", 103 => "联系人列表", _ => "其他类型列表" }; Console.WriteLine($"标题:{list.Title}"); Console.WriteLine($"类型:{listType}"); Console.WriteLine($"访问URL:{siteUrl}{list.DefaultViewUrl}"); Console.WriteLine("----------------------------------------"); } } catch (Exception ex) { Console.WriteLine($"出错:{ex.Message}"); } Console.ReadLine(); } } } }
代码说明
- 认证逻辑:用
SharePointOnlineCredentials完成账号密码认证,密码转成SecureString符合安全规范。 - 数据加载优化:通过
Include()指定需要的列表属性,避免加载冗余数据,提升请求效率。 - 类型区分:文档库的
BaseTemplate值为101,普通列表为100,其他数值对应不同内置列表类型,可按需扩展判断逻辑。 - 异常处理:捕获请求过程中的异常,快速排查权限、连接类问题。
注意事项
- 确保使用的账号拥有目标SPO站点的读取权限,否则会返回权限不足错误。
- 不要硬编码密码,建议通过控制台输入、配置文件或密钥管理服务获取,避免安全风险。
- 如果租户启用了MFA,需改用应用程序权限认证或支持MFA的认证方式,上述代码仅适用于账号密码认证场景。
内容的提问来源于stack exchange,提问作者PinkPanther
相关产品推荐
相关产品推荐

