从.Net应用程序访问SharePoint数据时处理凭据

时间:2018-02-07 15:37:28

标签: c# asp.net .net sharepoint wcf-data-services

我正在尝试从.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 个答案:

答案 0 :(得分:0)

如果您希望应用程序读取数据,则必须提供凭据。

您可以尝试使用REST或JSOM从客户端获取数据。这样就可以使用用户凭据,结果将被安全修整。

REST示例:http://my_sp_site_.com/sites/nvx/SPService/_api/web/lists/GetByTitle('Pages')/ items

如果您使用Accept添加application/json;odata=verbose标头,则结果为JSON。否则用XML格式。

SharePoint REST文档:https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/working-with-lists-and-list-items-with-rest