从 .Net 应用程序访问 SharePoint 数据时处理凭据
Posted
技术标签:
【中文标题】从 .Net 应用程序访问 SharePoint 数据时处理凭据【英文标题】:Handling credentials when accessing SharePoint data from .Net application 【发布时间】:2018-07-17 23:19:56 【问题描述】:我正在尝试从 .Net (C#) Web 应用程序访问一些 SharePoint 列表。我用谷歌搜索了这个主题,似乎共识是使用 WCF 数据服务(下面列出的步骤)。获取数据后,我将其显示在 jQuery 数据表中,使用 Ajax Web 服务调用来获取数据。
第一步是运行 DataSvcUtil.exe 来创建一个 DataService.cs 文件,其中包含从 .NET Framework 客户端应用程序访问数据服务所需的客户端数据服务类。然后添加了对 Microsoft.Data.OData.dll 和 Microsoft.Data.Services.Client.dll 的引用。
我创建了一个 Web 服务 API(如下)。在本地运行,从 VS 2017 或从应用程序服务器上的 IIS,我得到所有数据,尽管在 80 秒内(对于 16,000 条记录来说太长了)。但是,当我从浏览器运行此程序时,我收到状态码 500 错误,发现这是由于凭据问题。
我将凭据设置为 CredentialCache.DefaultCrdentilas(后来更改为 DefaultNetworkCredentials),但必须使用 NetworkCrdentials(UserID, pwd, domain)。
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public string GetCompletedAssessments()
SPService_DataContext dc = new SPService_DataContext(new Uri("http://my_sp_site_.com/sites/nvx/SPService/_vti_bin/listdata.svc/"));
dc.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Had to change the above to this to get it to work
dc.Credentials = new System.Net.NetworkCredential(MyUserID, MyPassword, DomainName);
var source = dc.CompletedAssessments;
string JSONresult = JsonConvert.SerializeObject(source);
return JSONresult;
但是,我只是使用我的凭据进行测试,这是不可行的。使用我正在使用的访问数据的方法我可以做些什么,或者我应该使用其他不需要提供凭据的数据访问方法吗?
应用程序位于与服务器 SharePoint 所在域相同但位置不同的服务器上。
【问题讨论】:
【参考方案1】:如果您希望应用程序读取数据,则必须提供凭据。
您可以尝试使用 REST 或 JSOM 从客户端获取数据。这样就使用了用户凭据,结果将被安全修整。
REST 示例:http://my_sp_site_.com/sites/nvx/SPService/_api/web/lists/GetByTitle('Pages')/items
如果您使用application/json;odata=verbose
添加Accept
标头,则结果为JSON。否则它在 XML 中。
SharePoint REST 文档:https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/working-with-lists-and-list-items-with-rest
【讨论】:
以上是关于从 .Net 应用程序访问 SharePoint 数据时处理凭据的主要内容,如果未能解决你的问题,请参考以下文章
从基于 Sharepoint 声明的身份验证 Web 应用程序中的代码访问 Windows 共享
提高 SharePoint 页面访问速度之 IIS 应用池回收
在 SharePoint Web 应用程序和 ASP.NET Web 应用程序之间传递用户凭据