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

.NET应用(VS2019)访问SharePoint链接及列出文档问题求助

.NET应用访问SharePoint Online并列出文档的正确实现

原代码存在的问题

  • 基础语法错误:username变量未加字符串引号,password的引号未闭合,部分语句缺少分号,编译无法通过
  • 异步方法误用:ExecuteQueryAsync是异步方法,未使用await会导致逻辑执行顺序混乱,无法正确获取数据
  • 未实现核心需求:仅加载了Site对象,没有遍历文档库及文档的逻辑

正确实现代码

首先在VS2019中安装NuGet包:Microsoft.SharePointOnline.CSOM,然后使用以下完整代码:

using System;
using System.Security;
using Microsoft.SharePoint.Client;
using System.Linq;

class SharePointDocumentLister
{
    static async System.Threading.Tasks.Task Main(string[] args)
    {
        // 替换为你的SharePoint站点URL
        string siteCollectionUrl = "https://reedelsevier.sharepoint.com/";
        // 注意:必须使用该SharePoint绑定的企业账号,不能用普通gmail
        string username = "your-account@reedelsevier.onmicrosoft.com";
        string password = "your-password";

        // 构建安全密码对象
        SecureString securePassword = new SecureString();
        foreach (char c in password)
        {
            securePassword.AppendChar(c);
        }

        // 使用using确保ClientContext正确释放
        using (ClientContext ctx = new ClientContext(siteCollectionUrl))
        {
            ctx.Credentials = new SharePointOnlineCredentials(username, securePassword);

            try
            {
                // 加载当前站点的根Web对象
                Web web = ctx.Web;
                ctx.Load(web, w => w.Title, w => w.ServerRelativeUrl);
                await ctx.ExecuteQueryAsync();
                Console.WriteLine($"当前站点:{web.Title}");

                // 获取目标文档库,替换为你实际要访问的库名称
                List docLibrary = web.Lists.GetByTitle("文档");
                ctx.Load(docLibrary);
                await ctx.ExecuteQueryAsync();

                // 查询库中所有项目,过滤出文档(排除文件夹)
                CamlQuery query = CamlQuery.CreateAllItemsQuery();
                ListItemCollection items = docLibrary.GetItems(query);
                // 指定要加载的文档属性,减少数据传输
                ctx.Load(items, 
                    items => items.Include(
                        item => item.File.Name, 
                        item => item.File.ServerRelativeUrl,
                        item => item.File.TimeCreated));
                await ctx.ExecuteQueryAsync();

                // 输出文档信息
                Console.WriteLine("\n文档列表:");
                foreach (ListItem item in items.Where(i => i.File != null))
                {
                    Console.WriteLine($"名称:{item.File.Name}");
                    Console.WriteLine($"访问路径:{siteCollectionUrl.TrimEnd('/')}{item.File.ServerRelativeUrl}");
                    Console.WriteLine($"创建时间:{item.File.TimeCreated}\n");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"访问失败:{ex.Message}");
                // 如需排查详细错误,可输出ex.StackTrace
            }
        }
    }
}

重要注意事项

  • 账号权限:必须使用与该SharePoint站点绑定的企业账号(格式通常为xxx@企业域名.onmicrosoft.com),普通个人邮箱无访问权限
  • 文档库名称:代码中的"文档"是SharePoint默认文档库的中文名称,若你的库是英文名称则替换为"Documents",或对应自定义名称
  • 异步处理:所有CSOM异步操作必须搭配await使用,否则会出现未预期的空引用或数据未加载问题
  • 权限验证:确保账号拥有目标文档库的读取权限,否则会抛出权限不足的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:40:23