使用 DataContext 在 Sharepoint Webpart 上抛出 401 未经授权的异常

401 Unauthorized exception throws on Sharepoint Webpart using DataContext

我正在使用以下代码创建 Sharepoint 数据上下文的新实例:

spDataContext con = new spDataContext(new Uri("http://mysite/subsite/_vti_bin/ListData.svc"));
con.Credentials = CredentialCache.DefaultCredentials;

然后我尝试使用

获取项目
var result = con.testingList.ToList();

然后下面的错误显示:

"401 UNAUTHORIZED"

错误截图如下:

但是,如果我通过提供共享点管理员用户名和密码来更改凭据,我就能够获取这些项目。

con.Credentials = new NetworkCredential(username, password);

但问题是:我想使用当前用户的凭据而不是管理员帐户,因为并非所有项目都应该被当前用户看到。

来自 IIS 的一些附加信息:

一开始,所有的认证方式都启用了,然后我尝试关闭基本和摘要认证,看看是否有帮助,但仍然抛出异常。

那么如何解决这个问题呢?

通过检查断点、写入日志或检查服务器审计来检查您实际连接的是哪个帐户 trail/Logs (IIS/SharePoint) - 您确定它是一个有效帐户而不是一个IUSR_xyz IIS 帐户或类似的东西?如果您使用的是分布式架构,还要检查您是否没有点击 Kerberos "double hop"。当向混音中添加另一个 server/service 时,这通常会使您感到困惑。

为了让它工作,您应该在 IIS 中配置 Authentication 选项,如下所示:

  • 匿名身份验证 - 禁用
  • ASPNET 模拟 - 禁用
  • Windows 身份验证 - 启用

您可以使用 CredentialCache.DefaultCredentials,但我建议从使用 WCF 服务切换到使用 CSOM (Microsoft.SharePoint.Client)。

最后的原因是:

我在 class 库中没有 System.Web 程序集,因此系统无法获取 CredentialCache.DefaultCredentials。