不建议使用Restsharp
2019-04-20 17:52
2446 查看
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; } }
相关文章推荐
- Ubuntu 11.04 更新源地址列表及更改方法,下载 建议使用台湾源
- Andorid 应用权限使用建议
- mysql5.7官网直译锁操作优化--表锁的使用建议
- 建议117:使用SSL确保通信中的数据安全
- LD SDK LDCControlDll 中 CXMLFile的进一步使用方法,建议以后改进
- iOS定位原理和使用建议
- [uwsgi]使用建议(类似最佳实践)
- CSS样式中字体大小,建议font-size使用em
- html不建议使用的元素
- Android :RxJava2.0到底更新了什么?(含使用建议)
- iOS定位原理和使用建议
- 强烈建议不要使用include_once/require_once
- 解决“要运行Visual Studio 2005 sp1,建议使用管理员权限”的问题
- thinkphp socket to support sso (php socket 不稳定,不建议使用)
- 【Android开发】Android中的长度单位详解及使用建议
- 【百度地图API】如何使用suggestion--下拉列表方式的搜索建议
- javacv开发详解之1:调用本机摄像头视频(建议使用javaCV1.3版本)
- 基于Python使用Redis的一些想法和建议
- 索引的创建方法,使用场合及建议
- 关于三层结构的一点使用心得与开发建议