using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml; namespace Ant.Common { public class WebApiHelper { /// /// 用户需要登录才能Post请求接口 /// /// /// /// /// /// public static T PostAuthorized(string url, string data, string token) { byte[] bytes = Encoding.UTF8.GetBytes(data); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //写数据 request.Method = "POST"; request.ContentLength = bytes.Length; request.ContentType = "application/json"; Stream reqstream = request.GetRequestStream(); reqstream.Write(bytes, 0, bytes.Length); //读数据 request.Timeout = 300000; request.Headers.Set("Pragma", "no-cache"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream streamReceive = response.GetResponseStream(); StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8); string strResult = streamReader.ReadToEnd(); //关闭流 reqstream.Close(); streamReader.Close(); streamReceive.Close(); request.Abort(); response.Close(); return JsonConvert.DeserializeObject(strResult); } /// /// 不需要授权的接口 /// /// /// /// /// /// public static T Post(string url, string data) { byte[] bytes = Encoding.UTF8.GetBytes(data); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //写数据 request.Method = "POST"; request.ContentLength = bytes.Length; request.ContentType = "application/json"; Stream reqstream = request.GetRequestStream(); reqstream.Write(bytes, 0, bytes.Length); //读数据 request.Timeout = 300000; request.Headers.Set("Pragma", "no-cache"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream streamReceive = response.GetResponseStream(); StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8); string strResult = streamReader.ReadToEnd(); //关闭流 reqstream.Close(); streamReader.Close(); streamReceive.Close(); request.Abort(); response.Close(); return JsonConvert.DeserializeObject(strResult); } /// /// 用户需要登录Get请求 /// /// /// /// /// /// public static T GetMap(string webApi) { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi); request.Method = "GET"; //request.ContentType = "application/json"; request.Timeout = 90000; request.Headers.Set("Pragma", "no-cache"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream streamReceive = response.GetResponseStream(); StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8); string strResult = streamReader.ReadToEnd(); streamReader.Close(); streamReceive.Close(); request.Abort(); response.Close(); return JsonConvert.DeserializeObject(strResult); } catch (Exception ex) { } return default(T); } /// /// 用户需要登录Get请求 /// /// /// /// /// /// public static T Get(string webApi, string query, string queryStr) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr); request.Method = "GET"; request.ContentType = "application/json"; request.Timeout = 90000; request.Headers.Set("Pragma", "no-cache"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream streamReceive = response.GetResponseStream(); StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8); string strResult = streamReader.ReadToEnd(); streamReader.Close(); streamReceive.Close(); request.Abort(); response.Close(); return JsonConvert.DeserializeObject(strResult); } /// /// 用户需要登录Get请求 /// /// /// /// /// /// public static DataTable Get(string webApi, string query, string queryStr) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr); request.Method = "GET"; request.ContentType = "application/x-www-form-urlencoded"; request.Timeout = 90000; request.Headers.Set("Pragma", "no-cache"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); XmlDocument doc = new XmlDocument(); doc = ReadXmlResponse(request.GetResponse());//读取服务端返回的结果 var dt = ConvertXMLToDataSet(doc.InnerXml); return dt.Tables[0]; //Stream streamReceive = response.GetResponseStream(); //StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8); //string strResult = streamReader.ReadToEnd(); //streamReader.Close(); //streamReceive.Close(); //request.Abort(); //response.Close(); //return strResult; } /// /// 用户需要登录Get请求 /// /// /// /// /// /// public static DataTable Get(string webApi, string query, string queryStr, int timeout) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr); request.Method = "GET"; request.ContentType = "application/x-www-form-urlencoded"; request.Timeout = timeout; request.Headers.Set("Pragma", "no-cache"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); XmlDocument doc = new XmlDocument(); doc = ReadXmlResponse(request.GetResponse());//读取服务端返回的结果 var dt = ConvertXMLToDataSet(doc.InnerXml); return dt.Tables[0]; } /// /// 获取XML转DataTable /// /// /// private static DataSet ConvertXMLToDataSet(string xmlData) { StringReader stream = null; XmlTextReader reader = null; try { DataSet xmlDS = new DataSet(); stream = new StringReader(xmlData); reader = new XmlTextReader(stream); xmlDS.ReadXml(reader); return xmlDS; } catch (Exception ex) { string strTest = ex.Message; return null; } finally { if (reader != null) reader.Close(); } } /// /// 读取服务端返回的结果 /// private static XmlDocument ReadXmlResponse(WebResponse response) { StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); String retXml = sr.ReadToEnd(); sr.Close(); XmlDocument doc = new XmlDocument(); doc.LoadXml(retXml); return doc; } /// /// 拼接get参数 /// /// /// public static Tuple GetQueryString(Dictionary parames) { // 第一步:把字典按Key的字母顺序排序 IDictionary sortedParams = new SortedDictionary(parames); IEnumerator> dem = sortedParams.GetEnumerator(); // 第二步:把所有参数名和参数值串在一起 StringBuilder query = new StringBuilder(""); //签名字符串 StringBuilder queryStr = new StringBuilder(""); //url参数 if (parames == null || parames.Count == 0) return new Tuple("", ""); while (dem.MoveNext()) { string key = dem.Current.Key; string value = dem.Current.Value; if (!string.IsNullOrEmpty(key)) { query.Append(key).Append(value); queryStr.Append("&").Append(key).Append("=").Append(value); } } return new Tuple(query.ToString(), queryStr.ToString().Substring(1, queryStr.Length - 1)); } /// /// 用户需要登录Get请求 /// /// /// API接口 /// 请求接口需要加密的数据 /// 请求接口传递的参数 /// 凭证 /// 是否需要参数签名 /// public static T GetAuthorized(string webApi, string query, string queryStr, string token, bool sign = true) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webApi + "?" + queryStr); request.Method = "GET"; request.ContentType = "application/json"; request.Timeout = 90000; request.Headers.Set("Pragma", "no-cache"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream streamReceive = response.GetResponseStream(); StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8); string strResult = streamReader.ReadToEnd(); streamReader.Close(); streamReceive.Close(); request.Abort(); response.Close(); return JsonConvert.DeserializeObject(strResult); } } }