using HL_FristAidPlatform_DTO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Runtime.Serialization.Json; using System.Text.RegularExpressions; using System.Web.Script.Serialization; namespace HL_FristAidPlatform_Public { /// /// HttpClient /// 访问实体类 /// public class HttpClientInstance : Client { /// /// 急危重症区域管理平台地址 /// public static string WebApiUrl = ConfigurationManager.AppSettings["WebApiUrl"]; /// /// 首辰健康大平台地址 /// public static string SCJK_WebApiUrl = ConfigurationManager.AppSettings["SCJK_WebApiUrl"]; /// /// IP地址 /// private static string ip = PublicHelp.GetLocalIp(); /// /// 重置TokenAPI /// private static string resetJWTURL = "/api/admin/T_SYS_User/ResetJWT?jwtStr={0}&deviceIP=" + ip + ""; /// /// 刷新token /// /// /// public static bool ResetJWT(string oldToken) { Uri urlPath = new Uri(WebApiUrl); HttpClient client = new HttpClient { BaseAddress = urlPath }; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage message = client.GetAsync(string.Format(resetJWTURL, oldToken)).Result; if (message.IsSuccessStatusCode) { var itemJson = message.Content.ReadAsStringAsync().Result.Replace("\"", ""); Information.User.Token = itemJson; return true; } else { return false; } } /// /// Get 访问方法 /// 查询 /// /// 方法详细地址 /// public override DataTable Get(string Url) { DataTable dataTable = new DataTable(); try { Uri urlPath = new Uri(WebApiUrl); string token = Information.User.Token; HttpClient client = new HttpClient { BaseAddress = urlPath }; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); HttpResponseMessage responseMessage = client.GetAsync(Url).Result; if (responseMessage.IsSuccessStatusCode) { var itemJson = responseMessage.Content.ReadAsStringAsync().Result; dataTable = JsonToDataTable(itemJson, out int i); return dataTable; } else { if (responseMessage.StatusCode.ToString() == "Unauthorized") { if (ResetJWT(token)) { return Get(Url); } } else { PublicClass.WriteLog(DateTime.Now.ToString(PublicClass.TimeToString) + responseMessage.RequestMessage + responseMessage.Content.ReadAsStringAsync().Result);//写入一条新log } } } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClient", "Get:\r\n" + ex); } return dataTable; } /// /// Get 访问方法 /// 查询 /// /// 方法详细地址 /// 返回DataSet public override DataSet GetDataSet(string Url) { DataSet dataSet = new DataSet(); try { Uri urlPath = new Uri(WebApiUrl); string token = Information.User.Token; HttpClient client = new HttpClient { BaseAddress = urlPath }; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); HttpResponseMessage responseMessage = client.GetAsync(Url).Result; if (responseMessage.IsSuccessStatusCode) { var itemJson = responseMessage.Content.ReadAsStringAsync().Result; return dataSet = JsonToDataSet(itemJson); } else { if (responseMessage.StatusCode.ToString() == "Unauthorized") { if (ResetJWT(token)) { return GetDataSet(Url); } } else { PublicClass.WriteLog(DateTime.Now.ToString(PublicClass.TimeToString) + responseMessage.RequestMessage + responseMessage.Content.ReadAsStringAsync().Result);//写入一条新log } } } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClient", "Get:\r\n" + ex); } return dataSet; } /// /// Get 访问方法 /// 查询 /// /// 方法详细地址 /// API链接地址类型 /// 分页时返回总条数 /// public override DataTable Get(string Url, Enumerate.Platform platform, out int totalNumber) { totalNumber = 0;//先赋值为0 DataTable dataTable = new DataTable(); try { #region 区分请求的地址 string ApiUrl = string.Empty; switch (platform) { case Enumerate.Platform.急危重症: ApiUrl = WebApiUrl; break; case Enumerate.Platform.首辰健康: ApiUrl = SCJK_WebApiUrl; break; default: ApiUrl = WebApiUrl; break; } #endregion 区分请求的地址 Uri urlPath = new Uri(ApiUrl); string token = Information.User.Token; HttpClient client = new HttpClient { BaseAddress = urlPath }; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); HttpResponseMessage responseMessage = client.GetAsync(Url).Result; if (responseMessage.IsSuccessStatusCode) { var itemJson = responseMessage.Content.ReadAsStringAsync().Result; return dataTable = JsonToDataTable(itemJson, out totalNumber); } else { if (responseMessage.StatusCode.ToString() == "Unauthorized") { if (ResetJWT(token)) { return Get(Url); } } else { PublicClass.WriteLog(DateTime.Now.ToString(PublicClass.TimeToString) + responseMessage.RequestMessage + responseMessage.Content.ReadAsStringAsync().Result);//写入一条新log } } } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClient", "Get:\r\n" + ex); } return dataTable; } /// /// Post /// /// /// /// public override ListEntity Post(string url, List list) { try { //创建一个处理序列化的DataContractJsonSerializer DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List)); MemoryStream ms = new MemoryStream(); //将资料写入MemoryStream serializer.WriteObject(ms, list[0]); //一定要在这设定Position ms.Position = 0; string UrlPath = WebApiUrl + url; //将MemoryStream转成HttpContent HttpContent content = new StreamContent(ms); //content.Headers.ContentType = new MediaTypeHeaderValue("application/json") { CharSet = Encoding.UTF8.WebName }; content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); ListEntity returnT = new ListEntity(); HttpClient client = new HttpClient(); //client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0"); //client.DefaultRequestHeaders.Add("Connection", "Keep-Alive"); //client.DefaultRequestHeaders.Add("Accept", "*/*"); string token = Information.User.Token; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); //由HttxpClient发出Post Method HttpResponseMessage response = client.PostAsync(UrlPath, content).Result; if (response.IsSuccessStatusCode) { var itemJson = response.Content.ReadAsStringAsync().Result; returnT.Success = response.IsSuccessStatusCode; returnT.Msg = response.RequestMessage.ToString(); returnT.DataString = itemJson; return returnT; } else { if (response.StatusCode.ToString() == "Unauthorized") { returnT.Msg = "该请求未认证"; if (ResetJWT(token)) { return Post(url, list); } } else if (response.StatusCode.ToString() == "Forbidden") { returnT.Msg = "没有权限操作"; } else { PublicClass.WriteErrorLog("HL_FristAidPlatform_Public", "HttpClientInstance Post:\r\n API地址:" + url + "\r\n错误消息:\r\n" + response.ToString() + "\r\n" + response.Content.ReadAsStringAsync().Result); } } return returnT; } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClientInstance", "Post:\r\n" + ex); return null; } } public override bool ExternalInterfacePost(string url, Dictionary list) { try { string UrlPath = WebApiUrl + url; //将MemoryStream转成HttpContent HttpClient client = new HttpClient(); var postContent = new MultipartFormDataContent(); string boundary = string.Format("--{0}", DateTime.Now.Ticks.ToString("x")); postContent.Headers.Add("ContentType", $"multipart/form-data,boundary={boundary}"); foreach (var item in list.Keys) { postContent.Add(new StringContent(list[item].ToString()), item); } //由HttxpClient发出Post Method HttpResponseMessage response = client.PostAsync(UrlPath, postContent).Result; if (response.IsSuccessStatusCode) { var itemJson = response.Content.ReadAsStringAsync().Result; return Convert.ToBoolean(itemJson.ToString()); } else { PublicClass.WriteErrorLog("HL_FristAidPlatform_Public", "HttpClientInstance Post:\r\n API地址:" + url + "\r\n错误消息:\r\n" + response.ToString() + "\r\n" + response.Content.ReadAsStringAsync().Result); return false; } } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClientInstance", "Post:\r\n" + ex); return false; } } /// /// Post请求并返回更新后的数据 /// /// /// /// public override ListEntity PostReturnTable(string url, List list) { try { //创建一个处理序列化的DataContractJsonSerializer DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(); //将资料写入MemoryStream serializer.WriteObject(ms, list[0]); //一定要在这设定Position ms.Position = 0; string UrlPath = WebApiUrl + url; string token = Information.User.Token; //将MemoryStream转成HttpContent HttpContent content = new StreamContent(ms); content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); ListEntity returnT = new ListEntity(); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); //由HttpClient发出Post Method HttpResponseMessage response = client.PostAsync(UrlPath, content).Result; if (response.IsSuccessStatusCode) { var itemJson = response.Content.ReadAsStringAsync().Result; returnT.Success = response.IsSuccessStatusCode; returnT.Msg = response.RequestMessage.ToString(); returnT.DataString = itemJson; returnT.DataTable = JsonToDataTable(itemJson, out int i); return returnT; } else { if (response.StatusCode.ToString() == "Unauthorized") { if (ResetJWT(token)) { return PostReturnTable(url, list); } } else { PublicClass.WriteErrorLog("HL_FristAidPlatform_Public", "HttpClientInstance Post:\r\n API地址:" + url + "\r\n错误消息:\r\n" + response.ToString() + "\r\n" + response.Content.ReadAsStringAsync().Result); } } return returnT; } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClientInstance", "PostReturnTable:\r\n" + ex); return null; } } /// /// 删 /// /// 地址 /// public override bool Delete(string url) { try { Uri urlPath = new Uri(WebApiUrl); HttpClient client = new HttpClient(); client.BaseAddress = urlPath; string token = Information.User.Token; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); HttpResponseMessage responseMessage = client.DeleteAsync(url).Result; if (responseMessage.IsSuccessStatusCode) { return true; } else { if (responseMessage.StatusCode.ToString() == "Unauthorized") { if (ResetJWT(token)) { return Delete(url); } } else { return false; } } } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClientInstance", "Delete:\r\n" + ex); } return false; } /// /// Json转DataTable /// /// Json字符 /// 分页时返回总条数 /// private static DataTable JsonToDataTable(string strJson, out int totalNumber) { int PageCount = 0;//当前页的总条数 totalNumber = 0;//先赋值为0 DataTable tb = new DataTable(); try { #region 新版本 JObject jobject = JObject.Parse(strJson); //判断是否存在对应的键值 if (jobject.Property("TotalNumber") != null) { int.TryParse(jobject["TotalNumber"].ToString(), out totalNumber); } if (jobject.Property("totalNumber") != null) { int.TryParse(jobject["totalNumber"].ToString(), out totalNumber); } //判断是否存在对应的键值 if (jobject.Property("PageCount") != null) { int.TryParse(jobject["PageCount"].ToString(), out PageCount); } if (jobject.Property("pageCount") != null) { int.TryParse(jobject["pageCount"].ToString(), out PageCount); } if (totalNumber > 0) { //创建表 string dataJson = string.Empty; if (jobject.Property("Data") != null) { var dataObj = jobject["Data"][0]; dataJson = Regex.Replace(dataObj.ToString(), @"\s", " ");//空白字符替换 } if (jobject.Property("data") != null) { var dataObj = jobject["data"][0]; dataJson = Regex.Replace(dataObj.ToString(), @"\s", " ");//空白字符替换 } JObject dataobj = JObject.Parse(dataJson); tb.TableName = ""; foreach (var item in dataobj) { DataColumn dc = new DataColumn(item.Key, Type.GetType("System.String")); tb.Columns.Add(dc); } if (PageCount == 0) PageCount = totalNumber; for (int i = 0; i < PageCount; i++) { string dataJson1 = string.Empty; if (jobject.Property("Data") != null) { var DataObj1 = jobject["Data"][i]; dataJson1 = Regex.Replace(DataObj1.ToString(), @"\s", " "); } if (jobject.Property("data") != null) { var DataObj1 = jobject["data"][i]; dataJson1 = Regex.Replace(DataObj1.ToString(), @"\s", " "); } JObject dataobj1 = JObject.Parse(dataJson1); DataRow dr = tb.NewRow(); foreach (var item in dataobj1) { dr[item.Key] = item.Value; } tb.Rows.Add(dr); } } #endregion 新版本 } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClientInstance", "JsonToDataTable:\r\n" + ex); } return tb; } /// /// 将JSON解析成DataSet只限标准的JSON数据 /// 例如:Json={t1:[{name:'数据name',type:'数据type'}]} /// 或 Json={t1:[{name:'数据name',type:'数据type'}],t2:[{id:'数据id',gx:'数据gx',val:'数据val'}]} /// /// Json字符串 /// DataSet public static DataSet JsonToDataSet(string Json) { DataSet ds = new DataSet(); try { JsonReader reader = new JsonTextReader(new StringReader(Json)); while (reader.Read()) { Json = reader.Value.ToString(); } if (!string.IsNullOrEmpty(Json)) { JavaScriptSerializer JSS = new JavaScriptSerializer(); object obj = JSS.DeserializeObject(Json); Dictionary datajson = (Dictionary)obj; foreach (var item in datajson) { DataTable dt = new DataTable(item.Key); object[] rows = (object[])item.Value; foreach (var row in rows) { Dictionary val = (Dictionary)row; DataRow dr = dt.NewRow(); foreach (KeyValuePair sss in val) { if (!dt.Columns.Contains(sss.Key)) { dt.Columns.Add(sss.Key.ToString()); dr[sss.Key] = sss.Value; } else dr[sss.Key] = sss.Value; } dt.Rows.Add(dr); } ds.Tables.Add(dt); } } return ds; } catch (Exception ex) { PublicClass.WriteErrorLog("JsonToDataSet", "JsonToDataSet:\r\n" + ex); } return ds; } /// /// 批量 (传递json格式数据) /// /// /// /// public override ListEntity BatchPost(string parameterData, string serviceUrl) { try { string UrlPath = WebApiUrl + serviceUrl; HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(UrlPath); HttpContent content = new StringContent(parameterData); content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); ListEntity returnT = new ListEntity(); HttpClient client = new HttpClient(); string token = Information.User.Token; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); //由HttpClient发出Post Method HttpResponseMessage response = client.PostAsync(UrlPath, content).Result; var itemJson = response.Content.ReadAsStringAsync().Result; if (response.IsSuccessStatusCode) { returnT.Success = response.IsSuccessStatusCode; returnT.Msg = response.RequestMessage.ToString(); returnT.DataString = itemJson; return returnT; } else { if (response.StatusCode.ToString() == "Unauthorized") { if (ResetJWT(token)) { return BatchPost(parameterData, serviceUrl); } } else { PublicClass.WriteErrorLog("HL_FristAidPlatform_Public", "HttpClientInstance Post:\r\n API地址:" + serviceUrl + "\r\n错误消息:\r\n" + response.ToString() + "\r\n" + itemJson); return null; } } } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClientInstance", "Post:\r\n" + ex); } return null; } public override ListEntity JsonPost(string parameterData, string serviceUrl) { try { string UrlPath = WebApiUrl + serviceUrl; HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(UrlPath); HttpContent content = new StringContent(parameterData); content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); ListEntity returnT = new ListEntity(); HttpClient client = new HttpClient(); string token = Information.User.Token; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); //由HttpClient发出Post Method HttpResponseMessage response = client.PostAsync(UrlPath, content).Result; var itemJson = response.Content.ReadAsStringAsync().Result; if (response.IsSuccessStatusCode) { returnT.Success = response.IsSuccessStatusCode; returnT.Msg = response.RequestMessage.ToString(); returnT.DataString = itemJson; return returnT; } else { if (response.StatusCode.ToString() == "Unauthorized") { if (ResetJWT(token)) { return BatchPost(parameterData, serviceUrl); } } else { PublicClass.WriteErrorLog("HL_FristAidPlatform_Public", "HttpClientInstance Post:\r\n API地址:" + serviceUrl + "\r\n错误消息:\r\n" + response.ToString() + "\r\n" + itemJson); return null; } } } catch (Exception ex) { PublicClass.WriteErrorLog("HttpClientInstance", "Post:\r\n" + ex); } return null; } } }