標籤:

C# RestSharp 使用

1.什麼是RestSharp

RestSharp是一個輕量的,不依賴任何第三方的組件或者類庫的Http的組件。它具有以下優點:

支持.NET 3.5+,Silverlight 4, Windows Phone 7, Mono, MonoTouch, Mono for Android, Compact Framework 3.5等

通過NuGet方便引入到任何項目

可以自動反序列化XML和JSON

支持自定義的序列化與反序列化

自動檢測返回的內容類型

支持HTTP的GET, POST, PUT, HEAD, OPTIONS, DELETE等操作

可以上傳多文件

支持oAuth 1, oAuth 2, Basic, NTLM and Parameter-based Authenticators等授權驗證等

支持非同步操作

極易上手並應用到任何項目中

2. 如何使用nuget添加restsharp到工程:

3.項目中使用舉例:

首先定義一個GetClient 方法:

//使用方法之前獲得cookie並放入RestClient對象public static RestClient GetClient(List<Cookie> cookies){ //RestClient傳遞的string型的url var client = new RestClient(TestConfigurations.Domain.AppendPathSegments("app")); client.CookieContainer = new System.Net.CookieContainer(); cookies.ForEach(c => client.CookieContainer.Add(new System.Net.Cookie(c.Name, c.Value, c.Path, c.Domain))); return client;}//封裝了一個方法來給restClient調用public static IRestResponse SendRequest(this RestClient client, Uri requestUrl, Method method, Dictionary<string, string> parameters = null){ var request = client.FirmRequest(method); client.BaseUrl = requestUrl; if (parameters != null) { foreach (var p in parameters) { request.AddParameter(p.Key, p.Value); } } //調用Execute方法來執行request return client.Execute(request);}

如果出現網路錯誤, RestResponse.ResponseStatus 會設置 ResponseStatus.Error, 反之則是ResponseStatus.Completed.

如果需要訪問 HTTP status code, 可以在 RestResponse.StatusCode 中找到。

//封裝了一個方法來生成request對象,並且賦予header的必要信息以及傳遞get/post方式public static RestRequest FirmRequest(this RestClient client, Method method){ var request = new RestRequest(); request.Method = method; request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); return request;}

下面是調用方法的例子:

//把cookies傳入clientvar client = HttpClientUtils.GetClient(Cookies);//生成需要使用的參數,add到request內var parameters = GetPage<AddUserPage>().EditUserForm.GetSubmitParameters();parameters["BillableHourTarget"] = target;//調用方法client.SendRequest(new Uri(I.GetUrl()), Method.POST, parameters);

也可以使用反序列化,生成JObject(把一個json對象反序列化為.net object

var jresult = (JObject)JsonConvert.DeserializeObject(result.Content); if (jresult["Success"].ToString().ToLower() == "true") //do something here

4.RestSharp反序列化

application/json - JsonDeserializer

application/xml - XmlDeserializer

text/json - JsonDeserializer

text/xml - XmlDeserializer

5. 其他用法:

從IRestResponse中獲取內容:

var client = HttpClientUtils.GetClient(cookies);result = client.SendRequest(new Uri(url), RestSharp.Method.GET).Content;

使用JsonConvert反序列化

var jtokenBudget = (JToken)JsonConvert.DeserializeObject(client.SendRequest(calendarUrl, getBudget).Content);

推薦閱讀:

什麼是tlsf內存分配演算法? 它和普通的內存分配演算法有什麼區別?
OpenGl 未找到glGenBuffers ?
如何看待阿里2016校招研發工程師筆試題題目?
用很厚的教材學編程的時候,該如何一邊攤開書一邊敲代碼?
如何格式化代碼能夠將類成員/函數的名字對齊?

TAG:C |