WebApiHelper.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Linq;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Xml;
  12. namespace Ant.Common
  13. {
  14. public class WebApiHelper
  15. {
  16. /// <summary>
  17. /// 用户需要登录才能Post请求接口
  18. /// </summary>
  19. /// <typeparam name="T"></typeparam>
  20. /// <param name="url"></param>
  21. /// <param name="data"></param>
  22. /// <param name="staffId"></param>
  23. /// <returns></returns>
  24. public static T PostAuthorized<T>(string url, string data, string token)
  25. {
  26. byte[] bytes = Encoding.UTF8.GetBytes(data);
  27. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  28. //写数据
  29. request.Method = "POST";
  30. request.ContentLength = bytes.Length;
  31. request.ContentType = "application/json";
  32. Stream reqstream = request.GetRequestStream();
  33. reqstream.Write(bytes, 0, bytes.Length);
  34. //读数据
  35. request.Timeout = 300000;
  36. request.Headers.Set("Pragma", "no-cache");
  37. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  38. Stream streamReceive = response.GetResponseStream();
  39. StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
  40. string strResult = streamReader.ReadToEnd();
  41. //关闭流
  42. reqstream.Close();
  43. streamReader.Close();
  44. streamReceive.Close();
  45. request.Abort();
  46. response.Close();
  47. return JsonConvert.DeserializeObject<T>(strResult);
  48. }
  49. /// <summary>
  50. /// 不需要授权的接口
  51. /// </summary>
  52. /// <typeparam name="T"></typeparam>
  53. /// <param name="url"></param>
  54. /// <param name="data"></param>
  55. /// <param name="staffId"></param>
  56. /// <returns></returns>
  57. public static T Post<T>(string url, string data)
  58. {
  59. byte[] bytes = Encoding.UTF8.GetBytes(data);
  60. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  61. //写数据
  62. request.Method = "POST";
  63. request.ContentLength = bytes.Length;
  64. request.ContentType = "application/json";
  65. Stream reqstream = request.GetRequestStream();
  66. reqstream.Write(bytes, 0, bytes.Length);
  67. //读数据
  68. request.Timeout = 300000;
  69. request.Headers.Set("Pragma", "no-cache");
  70. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  71. Stream streamReceive = response.GetResponseStream();
  72. StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
  73. string strResult = streamReader.ReadToEnd();
  74. //关闭流
  75. reqstream.Close();
  76. streamReader.Close();
  77. streamReceive.Close();
  78. request.Abort();
  79. response.Close();
  80. return JsonConvert.DeserializeObject<T>(strResult);
  81. }
  82. /// <summary>
  83. /// 用户需要登录Get请求
  84. /// </summary>
  85. /// <typeparam name="T"></typeparam>
  86. /// <param name="webApi"></param>
  87. /// <param name="queryStr"></param>
  88. /// <param name="staffId"></param>
  89. /// <returns></returns>
  90. public static T GetMap<T>(string webApi)
  91. {
  92. try
  93. {
  94. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi);
  95. request.Method = "GET";
  96. //request.ContentType = "application/json";
  97. request.Timeout = 90000;
  98. request.Headers.Set("Pragma", "no-cache");
  99. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  100. Stream streamReceive = response.GetResponseStream();
  101. StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
  102. string strResult = streamReader.ReadToEnd();
  103. streamReader.Close();
  104. streamReceive.Close();
  105. request.Abort();
  106. response.Close();
  107. return JsonConvert.DeserializeObject<T>(strResult);
  108. }
  109. catch (Exception ex)
  110. {
  111. }
  112. return default(T);
  113. }
  114. /// <summary>
  115. /// 用户需要登录Get请求
  116. /// </summary>
  117. /// <typeparam name="T"></typeparam>
  118. /// <param name="webApi"></param>
  119. /// <param name="queryStr"></param>
  120. /// <param name="staffId"></param>
  121. /// <returns></returns>
  122. public static T Get<T>(string webApi, string query, string queryStr)
  123. {
  124. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr);
  125. request.Method = "GET";
  126. request.ContentType = "application/json";
  127. request.Timeout = 90000;
  128. request.Headers.Set("Pragma", "no-cache");
  129. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  130. Stream streamReceive = response.GetResponseStream();
  131. StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
  132. string strResult = streamReader.ReadToEnd();
  133. streamReader.Close();
  134. streamReceive.Close();
  135. request.Abort();
  136. response.Close();
  137. return JsonConvert.DeserializeObject<T>(strResult);
  138. }
  139. /// <summary>
  140. /// 用户需要登录Get请求
  141. /// </summary>
  142. /// <typeparam name="T"></typeparam>
  143. /// <param name="webApi"></param>
  144. /// <param name="queryStr"></param>
  145. /// <param name="staffId"></param>
  146. /// <returns></returns>
  147. public static DataTable Get(string webApi, string query, string queryStr)
  148. {
  149. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr);
  150. request.Method = "GET";
  151. request.ContentType = "application/x-www-form-urlencoded";
  152. request.Timeout = 90000;
  153. request.Headers.Set("Pragma", "no-cache");
  154. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  155. XmlDocument doc = new XmlDocument();
  156. doc = ReadXmlResponse(request.GetResponse());//读取服务端返回的结果
  157. var dt = ConvertXMLToDataSet(doc.InnerXml);
  158. return dt.Tables[0];
  159. //Stream streamReceive = response.GetResponseStream();
  160. //StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
  161. //string strResult = streamReader.ReadToEnd();
  162. //streamReader.Close();
  163. //streamReceive.Close();
  164. //request.Abort();
  165. //response.Close();
  166. //return strResult;
  167. }
  168. /// <summary>
  169. /// 用户需要登录Get请求
  170. /// </summary>
  171. /// <typeparam name="T"></typeparam>
  172. /// <param name="webApi"></param>
  173. /// <param name="queryStr"></param>
  174. /// <param name="staffId"></param>
  175. /// <returns></returns>
  176. public static DataTable Get(string webApi, string query, string queryStr, int timeout)
  177. {
  178. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr);
  179. request.Method = "GET";
  180. request.ContentType = "application/x-www-form-urlencoded";
  181. request.Timeout = timeout;
  182. request.Headers.Set("Pragma", "no-cache");
  183. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  184. XmlDocument doc = new XmlDocument();
  185. doc = ReadXmlResponse(request.GetResponse());//读取服务端返回的结果
  186. var dt = ConvertXMLToDataSet(doc.InnerXml);
  187. return dt.Tables[0];
  188. }
  189. /// <summary>
  190. /// 获取XML转DataTable
  191. /// </summary>
  192. /// <param name="xmlData"></param>
  193. /// <returns></returns>
  194. private static DataSet ConvertXMLToDataSet(string xmlData)
  195. {
  196. StringReader stream = null;
  197. XmlTextReader reader = null;
  198. try
  199. {
  200. DataSet xmlDS = new DataSet();
  201. stream = new StringReader(xmlData);
  202. reader = new XmlTextReader(stream);
  203. xmlDS.ReadXml(reader);
  204. return xmlDS;
  205. }
  206. catch (Exception ex)
  207. {
  208. string strTest = ex.Message;
  209. return null;
  210. }
  211. finally
  212. {
  213. if (reader != null)
  214. reader.Close();
  215. }
  216. }
  217. /// <summary>
  218. /// 读取服务端返回的结果
  219. /// </summary>
  220. private static XmlDocument ReadXmlResponse(WebResponse response)
  221. {
  222. StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
  223. String retXml = sr.ReadToEnd();
  224. sr.Close();
  225. XmlDocument doc = new XmlDocument();
  226. doc.LoadXml(retXml);
  227. return doc;
  228. }
  229. /// <summary>
  230. /// 拼接get参数
  231. /// </summary>
  232. /// <param name="parames"></param>
  233. /// <returns></returns>
  234. public static Tuple<string, string> GetQueryString(Dictionary<string, string> parames)
  235. {
  236. // 第一步:把字典按Key的字母顺序排序
  237. IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parames);
  238. IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();
  239. // 第二步:把所有参数名和参数值串在一起
  240. StringBuilder query = new StringBuilder(""); //签名字符串
  241. StringBuilder queryStr = new StringBuilder(""); //url参数
  242. if (parames == null || parames.Count == 0)
  243. return new Tuple<string, string>("", "");
  244. while (dem.MoveNext())
  245. {
  246. string key = dem.Current.Key;
  247. string value = dem.Current.Value;
  248. if (!string.IsNullOrEmpty(key))
  249. {
  250. query.Append(key).Append(value);
  251. queryStr.Append("&").Append(key).Append("=").Append(value);
  252. }
  253. }
  254. return new Tuple<string, string>(query.ToString(), queryStr.ToString().Substring(1, queryStr.Length - 1));
  255. }
  256. /// <summary>
  257. /// 用户需要登录Get请求
  258. /// </summary>
  259. /// <typeparam name="T"></typeparam>
  260. /// <param name="webApi">API接口</param>
  261. /// <param name="query">请求接口需要加密的数据</param>
  262. /// <param name="queryStr">请求接口传递的参数</param>
  263. /// <param name="token">凭证</param>
  264. /// <param name="sign">是否需要参数签名</param>
  265. /// <returns></returns>
  266. public static T GetAuthorized<T>(string webApi, string query, string queryStr, string token, bool sign = true)
  267. {
  268. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr);
  269. request.Method = "GET";
  270. request.ContentType = "application/json";
  271. request.Timeout = 90000;
  272. request.Headers.Set("Pragma", "no-cache");
  273. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  274. Stream streamReceive = response.GetResponseStream();
  275. StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
  276. string strResult = streamReader.ReadToEnd();
  277. streamReader.Close();
  278. streamReceive.Close();
  279. request.Abort();
  280. response.Close();
  281. return JsonConvert.DeserializeObject<T>(strResult);
  282. }
  283. }
  284. }