使用 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。
我正在使用以下代码创建 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。