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