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