使用Rest API开发SharePoint Online
2017-03-27 16:55
507 查看
一、首先需要在扩展中引用3个dll:
System.Net.Http;Microsoft.SharePoint.Client;
Microsoft.SharePoint.Client.Runtime;
在Nuget中安装Newtonsoft.dll
二、再新建两个类:
SPHttpClient.cs
using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Headers; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Call_SharePoint_Restful { /// <summary> /// Http client for SharePoint Online /// </summary> public class SPHttpClient : HttpClient { public SPHttpClient(Uri webUri, string userName, string password) : base(new SPHttpClientHandler(webUri, userName, password)) { BaseAddress = webUri; } /// <summary> /// Execure request method /// </summary> /// <param name="requestUri"></param> /// <param name="method"></param> /// <param name="headers"></param> /// <param name="payload"></param> /// <returns></returns> public JObject ExecuteJson<T>(string requestUri, HttpMethod method, IDictionary<string, string> headers, T payload) { HttpResponseMessage response; switch (method.Method) { case "POST": var requestContent = new StringContent(JsonConvert.SerializeObject(payload)); requestContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=verbose"); DefaultRequestHeaders.Add("X-RequestDigest", RequestFormDigest()); if (headers != null) { foreach (var header in headers) { DefaultRequestHeaders.Add(header.Key, header.Value); } } response = PostAsync(requestUri, requestContent).Result; break; case "GET": response = GetAsync(requestUri).Result; break; default: throw new NotSupportedException(string.Format("Method {0} is not supported", method.Method)); } response.EnsureSuccessStatusCode(); var responseContent = response.Content.ReadAsStringAsync().Result; return String.IsNullOrEmpty(responseContent) ? new JObject() : JObject.Parse(responseContent); } public JObject ExecuteJson<T>(string requestUri, HttpMethod method, T payload) { return ExecuteJson(requestUri, method, null, payload); } public JObject ExecuteJson(string requestUri) { return ExecuteJson(requestUri, HttpMethod.Get, null, default(string)); } /// <summary> /// Request Form Digest /// </summary> /// <returns></returns> public string RequestFormDigest() { var endpointUrl = string.Format("{0}/_api/contextinfo", BaseAddress); var result = this.PostAsync(endpointUrl, new StringContent(string.Empty)).Result; result.EnsureSuccessStatusCode(); var content = result.Content.ReadAsStringAsync().Result; var contentJson = JObject.Parse(content); return contentJson["d"]["GetContextWebInformation"]["FormDigestValue"].ToString(); } } }
SPHttpClientHandler.cs
using System; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Security; using System.Threading; using System.Threading.Tasks; using Microsoft.SharePoint.Client; namespace Call_SharePoint_Restful { public class SPHttpClientHandler : HttpClientHandler { public SPHttpClientHandler(Uri webUri, string userName, string password) { CookieContainer = GetAuthCookies(webUri, userName, password); FormatType = FormatType.JsonVerbose; } protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f"); if (FormatType == FormatType.JsonVerbose) { //request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json;odata=verbose")); request.Headers.Add("Accept", "application/json;odata=verbose"); } return base.SendAsync(request, cancellationToken); } /// <summary> /// Retrieve SPO Auth Cookies /// </summary> /// <param name="webUri"></param> /// <param name="userName"></param> /// <param name="password"></param> /// <returns></returns> private static CookieContainer GetAuthCookies(Uri webUri, string userName, string password) { var securePassword = new SecureString(); foreach (var c in password) { securePassword.AppendChar(c); } var credentials = new SharePointOnlineCredentials(userName, securePassword); var authCookie = credentials.GetAuthenticationCookie(webUri); var cookieContainer = new CookieContainer(); cookieContainer.SetCookies(webUri, authCookie); return cookieContainer; } public FormatType FormatType { get; set; } } public enum FormatType { JsonVerbose, Xml } }
三、以下是调用的代码:
如何获取所有列表项
using (var client = new SPHttpClient(webUri, userName, password)){
var listTitle = "Tasks";
var endpointUrl = string.Format("{0}/_api/web/lists/getbytitle('{1}')/items",webUri,listTitle);
var data = client.ExecuteJson(endpointUrl);
foreach (var item in data["value"])
{
Console.WriteLine(item["Title"]);
}
}
如何获取指定的列表项
using (var client = new SPHttpClient(webUri, userName, password)){
var listTitle = "Tasks";
var itemId = 1;
var endpointUrl = string.Format("{0}/_api/web/lists/getbytitle('{1}')/items({2})",webUri,listTitle,itemId);
var data = client.ExecuteJson(endpointUrl);
Console.WriteLine(data["Title"]);
}
如何创建列表项
using (var client = new SPHttpClient(webUri, userName, password)){
var listTitle = "Tasks";
var itemPayload = new { __metadata = new { type = "SP.Data.TasksListItem" }, Title = "Approval Task"};
var endpointUrl = string.Format("{0}/_api/web/lists/getbytitle('{1}')/items",webUri,listTitle);
var data = client.ExecuteJson(endpointUrl,HttpMethod.Post,itemPayload);
Console.WriteLine("Task item '{0}' has been created",data["Title"]);
}
如何更新列表项
using (var client = new SPHttpClient(webUri, userName, password)){
var listTitle = "Tasks";
var itemId = 1;
var itemPayload = new { __metadata = new { type = "SP.Data.TasksListItem" }, Title = "Approval Task"};
var endpointUrl = string.Format("{0}/_api/web/lists/getbytitle('{1}')/items({2})",webUri,listTitle,itemId);
var headers = new Dictionary<string,string>();
headers["IF-MATCH"] = "*";
headers["X-HTTP-Method"] = "MERGE";
client.ExecuteJson(endpointUrl,HttpMethod.Post,headers, itemPayload);
Console.WriteLine("Task item has been updated");
}
如何删除列表项
using (var client = new SPHttpClient(webUri, userName, password)){
var listTitle = "Tasks";
var itemId = 2;
var endpointUrl = string.Format("{0}/_api/web/lists/getbytitle('{1}')/items({2})",webUri,listTitle,itemId);
var headers = new Dictionary<string,string>();
headers["IF-MATCH"] = "*";
headers["X-HTTP-Method"] = "DELETE";
client.ExecuteJson(endpointUrl,HttpMethod.Post,null,headers);
Console.WriteLine("Task item has been deleted");
}
原文:https://blog.vgrem.com/2015/04/04/consume-sharepoint-online-rest-service-using-net/
相关文章推荐
- SharePoint REST API - 使用REST接口对列表设置自定义权限
- SharePoint REST API - 使用REST接口对列表设置自定义权限
- Sharepoint online 如何使用asp.net开发项目!!!
- Rest Api how to retrieve list items from SharePoint Online
- 使用Host-Provider方式开发的App,无法获取SharePoint Online中的item
- SharePoint REST API - 使用REST API和jQuery上传一个文件
- Windows 商店应用中使用 SharePoint REST API
- Sharepoint online 如何使用asp.net开发项目!!!
- 在 Web 应用程序中使用 SharePoint API 以避免页面验证错误
- Post/Reply a post by Social feed REST API in SharePoint 2013
- SharePoint Online 创建和使用栏
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 新的机器翻译服务
- 在 Web 应用程序中使用 SharePoint API 以避免页面验证错误
- 使用 SharePoint API 自动部署 Web 应用程序
- SharePoint REST API - REST请求导航的数据结构
- 使用npm+babel+webpack+React搭建SharePoint hosted add-in开发环境
- SharePoint Online 创建和使用栏
- MSDN:Windows SharePoint Services 3.0 中使用代码的开发工具和技术(第 1 部分)
- SP2010开发和VS2010专家"食谱"--第六章节--Web Services和REST(6)--Creating a custom SharePoint WCF service
- SharePoint REST api