使用REST API访问Sharepoint 2010中的文件

时间:2016-11-09 22:01:04

标签: rest api sharepoint

我对Sharepoint知之甚少。我们有一个SP站点: http://host/sites/project/subproject/LIBRARY%20Name/Forms/AllItems.aspx

在浏览器中导航到此处显示了一个文件列表。 我想使用SPs REST API以编程方式访问这些文件。

我了解到,通过http://host/_vti_bin/ListData.svc网址可​​以访问REST API。在浏览器中,它返回包含服务,文档,图像等条目的XML。

要访问文件,我尝试了以下网址:

   http://host/_vti_bin/ListData.svc/Documents
   http://host/_vti_bin/ListData.svc/Documents('LIBRARY%20Name')
   http://host/_vti_bin/ListData.svc/Documents?$select=NAME('LIBRARY%20Name')

,以及许多其他变体。

我的问题是,鉴于我们网站的网址,REST API服务网址是什么样的?

由于

1 个答案:

答案 0 :(得分:2)

除SharePoint 2013及更高版本外,REST API for SharePoint 2010支持相对严格的资源集,特别是不支持文件资源。

话虽如此,您可以考虑使用以下方法下载文件。

  

为了从库中下载特定文件,我们假设   除了 web url 库名之外,还提供了列表项ID

第一个GET请求使用以下端点返回所谓的文档项(Microsoft.SharePoint.DataService.DocumentsItem类型):

https://<weburl>/_vti_bin/listdata.svc/<listname>(<itemid>) 

检索到文档项后,可以从PathName属性中提取文件网址(参见下面的示例),最后通过HTTP GET

下载

C#示例

var webUrl = "https://intranet.contoso.com/";
var listName = "Documents";  //<-list name goes here
var itemId = 1; //<-list item id goes here
using (var client = new WebClient())
{
    client.BaseAddress = webUrl;
    client.Credentials = credentials;
    client.Headers.Add(HttpRequestHeader.Accept, "application/json;odata=verbose");
    //client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
    var url = String.Format("_vti_bin/listdata.svc/{0}({1})",listName,itemId);
    var content = client.DownloadString(url);
    var json = JObject.Parse(content);
    //extract file url
    var fileUrl = (string)json["d"]["Path"] +  "/" + (string)json["d"]["Name"];
    Console.WriteLine(fileUrl);
    //download a file
    var fileName = Path.GetFileName(fileUrl);
    client.DownloadFile(fileUrl,fileName);
}