我正在尝试使用 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,而不是根级别吗?
还值得注意的是,这确实在本地工作,但我目前正在尝试从我的主机操作系统运行它以访问我的 VM 中的文件。
您没有将凭据设置为新的客户端上下文,这就是您收到 HTTP 错误 401(表示未经授权)的原因。在代码中,应在创建newContext
后添加以下行:
newContext.Credentials = credentials;
在 SharePoint 客户端对象模型中,不同客户端上下文中的对象是完全分离的。