StableVersion4.3/HL_FristAidPlatform_Public/Factory/HttpClientInstance.cs

696 lines
28 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// HttpClient
/// 访问实体类
/// </summary>
public class HttpClientInstance<T> : Client<T>
{
/// <summary>
/// 急危重症区域管理平台地址
/// </summary>
public static string WebApiUrl = ConfigurationManager.AppSettings["WebApiUrl"];
/// <summary>
/// 首辰健康大平台地址
/// </summary>
public static string SCJK_WebApiUrl = ConfigurationManager.AppSettings["SCJK_WebApiUrl"];
/// <summary>
/// IP地址
/// </summary>
private static string ip = PublicHelp.GetLocalIp();
/// <summary>
/// 重置TokenAPI
/// </summary>
private static string resetJWTURL = "/api/admin/T_SYS_User/ResetJWT?jwtStr={0}&deviceIP=" + ip + "";
/// <summary>
/// 刷新token
/// </summary>
/// <param name="oldToken"></param>
/// <returns></returns>
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;
}
}
/// <summary>
/// Get 访问方法
/// 查询
/// </summary>
/// <param name="url">方法详细地址</param>
/// <returns></returns>
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;
}
/// <summary>
/// Get 访问方法
/// 查询
/// </summary>
/// <param name="url">方法详细地址</param>
/// <returns>返回DataSet</returns>
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;
}
/// <summary>
/// Get 访问方法
/// 查询
/// </summary>
/// <param name="url">方法详细地址</param>
/// <param name="platform">API链接地址类型</param>
/// <param name="totalNumber">分页时返回总条数</param>
/// <returns></returns>
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;
}
/// <summary>
/// Post
/// </summary>
/// <param name="url"></param>
/// <param name="t"></param>
/// <returns></returns>
public override ListEntity<T> Post(string url, List<T> list)
{
try
{
//创建一个处理序列化的DataContractJsonSerializer
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<T>));
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<T> returnT = new ListEntity<T>();
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<string, string> 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;
}
}
/// <summary>
/// Post请求并返回更新后的数据
/// </summary>
/// <param name="url"></param>
/// <param name="t"></param>
/// <returns></returns>
public override ListEntity<T> PostReturnTable(string url, List<T> 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<T> returnT = new ListEntity<T>();
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;
}
}
/// <summary>
/// 删
/// </summary>
/// <param name="url">地址</param>
/// <returns></returns>
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;
}
/// <summary>
/// Json转DataTable
/// </summary>
/// <param name="strJson">Json字符</param>
/// <param name="totalNumber">分页时返回总条数</param>
/// <returns></returns>
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;
}
/// <summary>
/// 将JSON解析成DataSet只限标准的JSON数据
/// 例如Json{t1:[{name:'数据name',type:'数据type'}]}
/// 或 Json{t1:[{name:'数据name',type:'数据type'}],t2:[{id:'数据id',gx:'数据gx',val:'数据val'}]}
/// </summary>
/// <param name="Json">Json字符串</param>
/// <returns>DataSet</returns>
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<string, object> datajson = (Dictionary<string, object>)obj;
foreach (var item in datajson)
{
DataTable dt = new DataTable(item.Key);
object[] rows = (object[])item.Value;
foreach (var row in rows)
{
Dictionary<string, object> val = (Dictionary<string, object>)row;
DataRow dr = dt.NewRow();
foreach (KeyValuePair<string, object> 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;
}
/// <summary>
/// 批量 (传递json格式数据)
/// </summary>
/// <param name="parameterData"></param>
/// <param name="serviceUrl"></param>
/// <returns></returns>
public override ListEntity<T> 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<T> returnT = new ListEntity<T>();
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<T> 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<T> returnT = new ListEntity<T>();
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;
}
}
}