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>();

        }
原文地址:https://www.cnblogs.com/zhengwk/p/5435911.html