SharePoint 2010 CSOM - 关于子网站查询的 401

SharePoint 2010 CSOM - 401 on subsite query

我正在尝试使用 CSOM 从根站点访问数据,然后遍历其子站点以进入存储在其列表中的文件。当我去创建 ClientContext 时,它与根 URL 一起工作正常,但是当我使用其中一个子站点的 URL 时,我在点击 ExecuteQuery() 时收到 401。

using (var clientContext = new ClientContext(rootURL))
        {
            Console.WriteLine("Establishing connection...");

            var userName = System.Configuration.ConfigurationManager.AppSettings["userName"];
            var domain = System.Configuration.ConfigurationManager.AppSettings["domain"];
            var password = System.Configuration.ConfigurationManager.AppSettings["pwd"];
            var credentials = new NetworkCredential(userName, password, domain);
            clientContext.Credentials = credentials;

            _clientContext = clientContext;

            var spContext2 = new SharePointClientDataContext(clientContext);

            ClientContext newContext = new ClientContext(subsiteURL);
            var allLists = newContext.Web.Lists;
            newContext.Load(allLists);
            newContext.ExecuteQuery();

            try
            {
...

代码在 newContext.ExecuteQuery() 处失败。为什么我会在子站点级别而不是根级别遇到 401?有什么想法吗?

同样值得注意的是,这确实在本地工作,但我目前正在尝试从我的主机 OS 运行它以从我的 VM 访问文件。

您没有将凭据设置为新的客户端上下文,这就是您收到 HTTP 错误 401 的原因,这意味着未经授权。在您的代码中,您应该在创建 newContext 之后添加此行:

 newContext.Credentials = credentials;

在 SharePoint 客户端对象模型中,不同客户端上下文中的对象是完全分离的。