zoukankan      html  css  js  c++  java
  • RestSharp使用备忘

    (1)一般调用:

    public static List<T> Execute<T>(string resourceUrl, object obj, out int totalNum)
            {
                var client = new RestClient(baseUrl);
                var request = new RestRequest(resourceUrl, Method.POST);
    
                Type t = obj.GetType();
                foreach (PropertyInfo pi in t.GetProperties())
                {
                    string Name = pi.Name;
                    string Value = string.Empty;
                    if (pi.GetValue(obj, null) != null)
                    {
                        Value = pi.GetValue(obj, null).ToString();
                    }
                    request.AddQueryParameter(Name, Value);
                }
                IRestResponse response = client.Execute(request);
    
                return RosolveResponse<T>(response, out totalNum);
            }

    (2)传json参数(这里用到了Newtonsoft.Json):

    public static List<T> ExecuteJson<T>(string resourceUrl, object obj, out int totalNum)
            {
                var client = new RestClient(baseUrl);
                var request = new RestRequest(resourceUrl, Method.POST);
                
                string jsonToSend = JsonConvert.SerializeObject(obj);
    
                request.AddParameter("application/json; charset=utf-8", jsonToSend, ParameterType.RequestBody);
                request.RequestFormat = DataFormat.Json;
    
                IRestResponse response = client.Execute(request);
    
                return RosolveResponse<T>(response, out totalNum);
    }

    这一段用HttpWebRequest实现是这样的:

            public static List<T> ExecuteJson<T>(string resourceUrl, object obj, out int totalNum)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseUrl + resourceUrl);
                request.Method = "post";
                request.ContentType = "application/json;charset=UTF-8";
    
                var stream = request.GetRequestStream();
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write(JsonConvert.SerializeObject(obj));
                    writer.Flush();
                }
    
                HttpWebResponse response = null;
                try
                {
                    response = (HttpWebResponse)request.GetResponse();
                }
                catch
                {
                    totalNum = 0;
                    return new List<T>();
                }
    
                StreamReader responseReader = null;
                string responseData = "";
    
                try
                {
                    responseReader = new StreamReader(response.GetResponseStream());
                    responseData = responseReader.ReadToEnd();
    
                    RestResult ret = JsonConvert.DeserializeObject<RestResult>(responseData);
                    JContainer resData;
    
                    if (ret.Code == 200)
                    {
                        resData = ret.ResData;
    
                        totalNum = ret.ResData.Value<int>("totalNum");
                        JContainer dataResult = ret.ResData.Value<JContainer>("dataResult");
    
                        return dataResult.ToList<T>();
                    }
                    totalNum = 0;
                    return new List<T>();
                }
                catch
                {
                    totalNum = 0;
                    return new List<T>();
                }
                finally
                {
                    response.GetResponseStream().Close();
                    responseReader.Close();
                    responseReader = null;
                }
            }

    附:RosolveResponse函数(这里用到了Newtonsoft.Json):

    private static List<T> RosolveResponse<T>(IRestResponse response, out int totalNum)
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    RestResult ret = JsonConvert.DeserializeObject<RestResult>(response.Content);
                    JContainer resData;
    
                    if (ret.Code == 200)
                    {
                        resData = ret.ResData;
    
                        totalNum = ret.ResData.Value<int>("totalNum");  //取值
                        JContainer dataResult = ret.ResData.Value<JContainer>("dataResult");  //取值
    
                        return dataResult.ToList<T>();
                    }
                }
                totalNum = 0;
                return new List<T>();
    
            }
  • 相关阅读:
    POJ 1236 Network of Schools(强连通分量缩点求根节点和叶子节点的个数)
    文本编辑器vim和gedit
    Ubuntu安装tensorflow
    剑指offer——python【第29题】最小的K个数
    剑指offer——python【第30题】连续子数组的最大和
    剑指offer——python【第37题】数字在排序数组中出现的次数
    剑指offer——python【第28题】数组 中出现次数超过一半的数字
    剑指offer——python【第31题】整数1出现的次数
    剑指offer——python【第54题】字符流中第一个不重复的字符
    剑指offer——python【第40题】数组中只出现一次的数字
  • 原文地址:https://www.cnblogs.com/zhengwk/p/5435911.html
Copyright © 2011-2022 走看看