RestSharp是一個輕量的,不依賴任何第三方的組件或者類庫的Http的組件。RestSharp具有以下的優點:
1、支持.NET 3.5+,Silverlight 4, Windows Phone 7, Mono, MonoTouch, Mono for Android, Compact Framework 3.5等
2、通過NuGet方便引入到任何項目 ( Install-Package restsharp )
3、可以自動反序列化XML和JSON
4、支持自定義的序列化與反序列化
5、自動檢測返回的內容類型
6、支持HTTP的GET, POST, PUT, HEAD, OPTIONS, DELETE等操作
7、可以上傳多文件
8、支持oAuth 1, oAuth 2, Basic, NTLM and Parameter-based Authenticators等授權驗證等
9、支持異步操作
10、極易上手並應用到任何項目中
下面則是本人對RestSharp的一些整理和擴展:

1 using RestSharp; 2 using System; 3 4 namespace HB.Common.Tools.Http 5 { 6 /// <summary> 7 /// API請求執行者接口 8 /// </summary> 9 public interface IRestSharp 10 { 11 /// <summary> 12 /// 同步執行方法 13 /// </summary> 14 /// <param name="request"></param> 15 /// <returns></returns> 16 IRestResponse Execute(IRestRequest request); 17 18 /// <summary> 19 /// 同步執行方法 20 /// </summary> 21 /// <typeparam name="T">返回值</typeparam> 22 /// <param name="request">請求參數</param> 23 /// <returns></returns> 24 T Execute<T>(IRestRequest request) where T : new(); 25 26 /// <summary> 27 /// 異步執行方法 28 /// </summary> 29 /// <param name="request">請求參數</param> 30 /// <param name="callback"></param> 31 /// <returns></returns> 32 RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<IRestResponse> callback); 33 34 /// <summary> 35 /// 異步執行方法 36 /// </summary> 37 /// <typeparam name="T"></typeparam> 38 /// <param name="request"></param> 39 /// <param name="callback"></param> 40 /// <returns></returns> 41 RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<IRestResponse<T>> callback) where T : new(); 42 } 43 }

1 using RestSharp; 2 using RestSharp.Authenticators; 3 using System; 4 5 namespace HB.Common.Tools.Http 6 { 7 /// <summary> 8 /// Rest接口執行者 9 /// </summary> 10 public class RestSharpClient : IRestSharp 11 { 12 /// <summary> 13 /// 請求客戶端 14 /// </summary> 15 private RestClient client; 16 17 /// <summary> 18 /// 接口基地址 格式:http://www.xxx.com/ 19 /// </summary> 20 private string BaseUrl { get; set; } 21 22 /// <summary> 23 /// 默認的時間參數格式 24 /// </summary> 25 private string DefaultDateParameterFormat { get; set; } 26 27 /// <summary> 28 /// 默認驗證器 29 /// </summary> 30 private IAuthenticator DefaultAuthenticator { get; set; } 31 32 /// <summary> 33 /// 構造函數 34 /// </summary> 35 /// <param name="baseUrl"></param> 36 /// <param name="authenticator"></param> 37 public RestSharpClient(string baseUrl, IAuthenticator authenticator = null) 38 { 39 BaseUrl = baseUrl; 40 client = new RestClient(BaseUrl); 41 DefaultAuthenticator = authenticator; 42 43 //默認時間顯示格式 44 DefaultDateParameterFormat = "yyyy-MM-dd HH:mm:ss"; 45 46 //默認校驗器 47 if (DefaultAuthenticator != null) 48 { 49 client.Authenticator = DefaultAuthenticator; 50 } 51 } 52 53 /// <summary> 54 /// 通用執行方法 55 /// </summary> 56 /// <param name="request">請求參數</param> 57 /// <remarks> 58 /// 調用實例: 59 /// var client = new RestSharpClient("http://localhost:82/"); 60 /// var result = client.Execute(new RestRequest("api/values", Method.GET)); 61 /// var content = result.Content;//返回的字符串數據 62 /// </remarks> 63 /// <returns></returns> 64 public IRestResponse Execute(IRestRequest request) 65 { 66 request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; 67 var response = client.Execute(request); 68 return response; 69 } 70 71 /// <summary> 72 /// 同步執行方法 73 /// </summary> 74 /// <typeparam name="T">返回的泛型對象</typeparam> 75 /// <param name="request">請求參數</param> 76 /// <remarks> 77 /// var client = new RestSharpClient("http://localhost:82/"); 78 /// var result = client.Execute<List<string>>(new RestRequest("api/values", Method.GET)); 79 /// </remarks> 80 /// <returns></returns> 81 public T Execute<T>(IRestRequest request) where T : new() 82 { 83 request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; 84 var response = client.Execute<T>(request); 85 return response.Data; 86 } 87 88 /// <summary> 89 /// 異步執行方法 90 /// </summary> 91 /// <param name="request">請求參數</param> 92 /// <param name="callback">回調函數</param> 93 /// <remarks> 94 /// 調用實例: 95 /// var client = new RestSharpClient("http://localhost:62981/"); 96 /// client.ExecuteAsync<List<string>>(new RestRequest("api/values", Method.GET), result => 97 /// { 98 /// var content = result.Content;//返回的字符串數據 99 /// }); 100 /// </remarks> 101 /// <returns></returns> 102 public RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<IRestResponse> callback) 103 { 104 request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; 105 return client.ExecuteAsync(request, callback); 106 } 107 108 /// <summary> 109 /// 異步執行方法 110 /// </summary> 111 /// <typeparam name="T">返回的泛型對象</typeparam> 112 /// <param name="request">請求參數</param> 113 /// <param name="callback">回調函數</param> 114 /// <remarks> 115 /// 調用實例: 116 /// var client = new RestSharpClient("http://localhost:62981/"); 117 /// client.ExecuteAsync<List<string>>(new RestRequest("api/values", Method.GET), result => 118 /// { 119 /// if (result.StatusCode != HttpStatusCode.OK) 120 /// { 121 /// return; 122 /// } 123 /// var data = result.Data;//返回數據 124 /// }); 125 /// </remarks> 126 /// <returns></returns> 127 public RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<IRestResponse<T>> callback) where T : new() 128 { 129 request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; 130 return client.ExecuteAsync<T>(request, callback); 131 } 132 } 133 }