zoukankan      html  css  js  c++  java
  • Restsharp在使用上的一点小问题

    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; }
            }
  • 相关阅读:
    python基础集结号
    3,jieba gensim 最好别分家之最简单的相似度实现
    2,PyAudio 实现录音 自动化交互实现问答
    1,百度云接口
    16,Flask-Migrate
    移动端web开发 尽量哪些标签 常用标签及注意事项
    flex布局
    -webkit-box
    网页图片jpg,gif,png对比。
    原生判断是否存在某个类,手机端事件,手机端测试
  • 原文地址:https://www.cnblogs.com/ccjungle/p/10741853.html
Copyright © 2011-2022 走看看