Restsharp確實是個優秀的插件,它最大的特點是內置了JsonConverter, 在一定程度上簡化了HttpWebRequest的使用,在nuget上面有19.3M的下載量,是個很好的證明。
但我認為它的致命缺陷就在於內置了JsonConverter, 在使用時無法將實體類與Http訪問做解耦,因此很難封裝成一個helper類。當然可以用泛型來解決這個問題,如果不考慮解耦的話。
第二個問題是,它內置的JsonConvert要求實體類有無參數的構造函數,而NewtonJson不用。
實際上,我在實體類上加入了無參數的構造函數,但還是反序列化失敗了:
response2.Data返回null, response2.Content返回實體的Json
第三個問題,支持的.net Framework版本比較少
我在4.0,4.5上nuget失敗,在4.5.2nuget成功。
留下代碼做個記錄
public Person CheckPerson(WorkInfo workInfo, int page, int pageSize) { string baseUrl = "https://api.abc.com/api"; string url = "/Person"; url += page == 100 ? page.ToString() : pageSize + "/" + page; //發送HTTPS請求 if (baseUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { HwApiHelper.SetCertificatePolicy(); } var client = new RestClient(baseUrl); var request = new RestRequest(url); request.Timeout = 30000; request.Method = Method.POST; request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer " + token.Access_token); request.AddHeader("soapAction", ""); request.AddJsonBody(workInfo);//直接傳輸一個實體,無需如HttpWebRequest那樣,先序列化,編碼成byte[],再通過WriteSteam寫 /* //方式1:按指定的格式返回響應文本 IRestResponse response = client.Execute(request); var content = response.Content;//按指定的格式返回響應文本,如json */ //方式2:用內置反序列化工具直接反序列化為實體,要求實體類有無參數的構造函數 IRestResponse<Person> response2 = client.Execute<Person>(request); //已經增加了無參構造函數,卻可能不成功 return response2.Data; } public class Person { public string Name { get; set; } public DateTime BornDate { get; set; } public string Gender { get; set; } public Person() { } } public class WorkInfo { public string Company { get; set; } public string Title { get; set; } }