[C#.NET][Sharepoint 2013] Use REST API(ListData.svc) Upload file

[C#.NET][Sharepoint 2013] Use REST API(ListData.svc) Upload file

ListData.svc 是用 WCF 實作的 RESTful /OData API, 顧名思義就是用來處理清單(文件庫也是清單),它所提供的功能不多,但如果你只是要處理清單內容,這個服務就夠用了;官方已經建議已用新版 API,新版的 API 就在上篇已經介紹過了http://www.dotblogs.com.tw/yc421206/archive/2014/06/12/145512.aspx,功能也比較多

本文章節

端點服務位置

CRUD 範例

 


端點服務位置

http://<sps server>/_vti_bin/listdata.svc

 

在VS的專案直接加入參考,如下圖:

image

 

用 LINQPad直接將資料撈出來,如下圖所示

image

 

WCF Data Service 已經實作 OData 服務,透過 LINQPad 輕鬆進行語法轉換,如下圖所示

http://sps2013/_vti_bin/listdata.svc/MyDocuments()?$top=100

image

 

 

 


CRUD 範例

程式處理基本上沒有什麼問題,看範例很容易理解

加入 ListData.svc 參考後,會幫我們產生相對應的主類別以及其他類別,我的主類別叫 TopSiteDataContext 這是根據網站Title所產生,別傻傻的照抄,我的清單裡有一個 MyDocuments,每一個 Row 代表的是 MyDocumentsItem ,清單 MyList 也是一樣有MyListItem,如下圖:

image

 

Upload File


{
    var fileName = "簡歷.docx";
    var contentType = "Document";
    var path = "/myDocuments/" + fileName;
    var stream = File.Open(fileName, FileMode.Open);

    try
    {
        var dbContext = new TopSiteDataContext(new Uri("http://sps2013/_vti_bin/listdata.svc"));
        dbContext.Credentials = new NetworkCredential(YourId, YourPassword, YourDomain);

        MyDocumentsItem item = new MyDocumentsItem();
        item.Title = fileName;
        item.ContentType = contentType;
        item.Path = path;
        item.Name = fileName;

        dbContext.AddToMyDocuments(item);
        dbContext.SetSaveStream(item, stream, false, contentType, path);
        dbContext.SaveChanges();
    }
    catch (Exception ex)
    {
        //todo:process exceptioin
    }
    finally
    {
        stream.Dispose();
    }
}


 
 

image

 

Update file Item


{
    var dbContext = new TopSiteDataContext(new Uri("http://sps2013/_vti_bin/listdata.svc"));
    dbContext.Credentials = new NetworkCredential(YourId, YourPassword, YourDomain);
    var find = dbContext.MyDocuments.Where(o => o.Name == "簡歷.docx").FirstOrDefault();

    if (find == null)
    {
        MessageBox.Show("No Found");
    }

    find.Name = "123.docx";
    dbContext.UpdateObject(find);
    dbContext.SaveChanges();
}

 

Delete File


{
    var dbContext = new TopSiteDataContext(new Uri("http://sps2013/_vti_bin/listdata.svc"));
    dbContext.Credentials = new NetworkCredential(YourId, YourPassword, YourDomain);
    var find = dbContext.MyDocuments.Where(o => o.Name == "123.docx").FirstOrDefault();

    if (find == null)
    {
        MessageBox.Show("No Found");
    }

    dbContext.DeleteObject(find);
    dbContext.SaveChanges();
}

 

New List Item


{
    var dbContext = new TopSiteDataContext(new Uri("http://sps2013/_vti_bin/listdata.svc"));
    dbContext.Credentials = new NetworkCredential(YourId, YourPassword, YourDomain);

    MyListItem item = new MyListItem();
    item.Title = "item1";
    dbContext.AddToMyList(item);
    dbContext.UpdateObject(item);
    dbContext.SaveChanges();
}

 

執行結果,如下圖:

image


文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/06/20/145637.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo