using PCITC.Mobile.Manage.Common;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Web;
namespace DMCWebAPI.Tools
{
public static class HttpClinetHelper
{
public static Log4NetToDatabase.LogMessage LogMes { get; set; }
public static string NeedLog = string.IsNullOrEmpty(ConfigurationManager.AppSettings["needLog"]) ? "" : ConfigurationManager.AppSettings["needLog"];//是否数据库需要记录日志信息
/// <summary>
/// Post提交对象,无返回值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data">Post的对象</param>
/// <param name="url">服务地址</param>
public static void Post<T>(T data,string url)
{
Post(data, url, null);
}
/// <summary>
/// Post提交,无返回值
/// </summary>
/// <param name="url"></param>
public static void Post(string url)
{
Post<object>(null, url, null);
}
/// <summary>
/// Post提交对象,返回值类型为V
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
/// <param name="data"></param>
/// <param name="url"></param>
/// <returns></returns>
public static V Post<T,V>(T data,string url)
{
return Post<T,V>(data, url, null);
}
/// <summary>
/// Post提交,返回值类型为V
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
/// <param name="data"></param>
/// <param name="url"></param>
/// <returns></returns>
public static V Post<V>(string url)
{
return Post<object, V>(null, url, null);
}
/// <summary>
/// Get获取
/// </summary>
/// <param name="url">服务地址</param>
public static void Get(string url)
{
Get(url, null);
}
/// <summary>
/// get获取
/// </summary>
/// <typeparam name="T">返回的数据类型</typeparam>
/// <param name="url">服务地址</param>
/// <returns></returns>
public static T Get<T>(string url)
{
return Get<T>(url,null);
}
/// <summary>
/// Post提交对象,无返回值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data">Post的对象</param>
/// <param name="url">服务地址</param>
public static void Post<T>(T data, string url, Dictionary<string, string> httpHeaders)
{
HttpResponseMessage response = null;
StringContent httpContent = null;
if (data != null)
{
//var json = JsonSerializerHelper.Serializer(data);
var json = Tools.JSONHelper.SerializeToJson(data);
httpContent = new StringContent(json, new UTF8Encoding(), "application/json");
}
using (HttpClient client = new HttpClient())
{
if (httpHeaders != null)
{
if (httpContent!=null)
{
foreach (var headerItem in httpHeaders)
{
httpContent.Headers.Add(headerItem.Key, headerItem.Value);
}
}
else
{
foreach (var headerItem in httpHeaders)
{
client.DefaultRequestHeaders.Add(headerItem.Key, headerItem.Value);
}
}
}
response = client.PostAsync(url, httpContent).Result;
//Logger.WriteLog("SerialNumberServiceProxy StatusCode:"+response.StatusCode.ToString(), System.Diagnostics.EventLogEntryType.Warning);
if (!response.IsSuccessStatusCode)
{
//Logger.WriteLog(response.Content.ReadAsStringAsync().Result, System.Diagnostics.EventLogEntryType.Error);
ErrorMessage errorResult = null;
try
{
errorResult = response.Content.ReadAsAsync<ErrorMessage>().Result;
}
catch
{
using (var stream = response.Content.ReadAsStreamAsync().Result)
{
byte[] arrayByte = new byte[stream.Length];
stream.Read(arrayByte, 0, (int)stream.Length);
throw new Exception(new UTF8Encoding().GetString(arrayByte));
}
}
if (errorResult != null)
{
LogMes = new Log4NetToDatabase.LogMessage("Post<T>:Code:" + errorResult.Code + ",Message:" + errorResult.Message, "DefaultCode");
LogCommon.ilogDebugDb.Debug(LogMes);
}
}
}
}
public static string PostJSON(string jsonData, string url, Dictionary<string, string> httpHeaders)
{
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
HttpResponseMessage response = null;
StringContent httpContent = null;
if (jsonData != null)
{
httpContent = new StringContent(jsonData, new UTF8Encoding(), "application/json");
}
using (HttpClient client = new HttpClient())
{
if (httpHeaders != null)
{
if (httpContent != null)
{
foreach (var headerItem in httpHeaders)
{
httpContent.Headers.Add(headerItem.Key, headerItem.Value);
}
}
else
{
foreach (var headerItem in httpHeaders)
{
client.DefaultRequestHeaders.Add(headerItem.Key, headerItem.Value);
}
}
}
response = client.PostAsync(url, httpContent).Result;
//Logger.WriteLog("SerialNumberServiceProxy StatusCode:"+response.StatusCode.ToString(), System.Diagnostics.EventLogEntryType.Warning);
if (!response.IsSuccessStatusCode)
{
//Logger.WriteLog(response.Content.ReadAsStringAsync().Result, System.Diagnostics.EventLogEntryType.Error);
ErrorMessage errorResult = null;
try
{
errorResult = response.Content.ReadAsAsync<ErrorMessage>().Result;
}
catch
{
using (var stream = response.Content.ReadAsStreamAsync().Result)
{
byte[] arrayByte = new byte[stream.Length];
stream.Read(arrayByte, 0, (int)stream.Length);
throw new Exception(new UTF8Encoding().GetString(arrayByte));
}
}
if (errorResult != null)
{
LogMes = new Log4NetToDatabase.LogMessage("Post<T>:Code:" + errorResult.Code + ",Message:" + errorResult.Message, "DefaultCode");
LogCommon.ilogDebugDb.Debug(LogMes);
}
return errorResult.Message;
}
else
{
return "true";
}
}
}
/// <summary>
/// Post提交对象,无内容,无返回值
/// </summary>
/// <param name="url">服务地址</param>
/// <param name="httpHeaders">http头信息</param>
public static void Post(string url, Dictionary<string, string> httpHeaders)
{
Post<object>(null,url,httpHeaders);
}
/// <summary>
/// Post提交对象,返回值类型为V
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
/// <param name="data"></param>
/// <param name="url"></param>
/// <returns></returns>
public static V Post<T, V>(T data, string url, Dictionary<string, string> httpHeaders)
{
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
V result = default(V);
StringContent httpContent = null;
if (data != null)
{
var json = Tools.JSONHelper.SerializeToJson(data);
//var json = JsonSerializerHelper.Serializer(data);
httpContent = new StringContent(json, new UTF8Encoding(), "application/json");
}
using (HttpClient client = new HttpClient())
{
if (httpHeaders != null)
{
if (httpContent != null)
{
foreach (var headerItem in httpHeaders)
{
httpContent.Headers.Add(headerItem.Key, headerItem.Value);
}
}
else
{
foreach (var headerItem in httpHeaders)
{
client.DefaultRequestHeaders.Add(headerItem.Key, headerItem.Value);
}
}
}
var response = client.PostAsync(url, httpContent).Result;
//Logger.WriteLog("SerialNumberServiceProxy StatusCode:"+response.StatusCode.ToString(), System.Diagnostics.EventLogEntryType.Warning);
if (!response.IsSuccessStatusCode)
{
//Logger.WriteLog(response.Content.ReadAsStringAsync().Result, System.Diagnostics.EventLogEntryType.Error);
ErrorMessage errorResult = null;
try
{
errorResult = response.Content.ReadAsAsync<ErrorMessage>().Result;
}
catch
{
using (var stream = response.Content.ReadAsStreamAsync().Result)
{
byte[] arrayByte = new byte[stream.Length];
stream.Read(arrayByte, 0, (int)stream.Length);
throw new Exception(new UTF8Encoding().GetString(arrayByte));
}
}
if (errorResult != null)
{
//throw new UtilityException(errorResult.Code, errorResult.Message);
throw new Exception("1");
}
}
else
{
return response.Content.ReadAsAsync<V>().Result;
}
}
return result;
}
public static V Post<V>(string url, Dictionary<string, string> httpHeaders)
{
return Post<object,V>(null,url,httpHeaders);
}
/// <summary>
/// Get获取
/// </summary>
/// <param name="url">服务地址</param>
public static void Get(string url, Dictionary<string, string> httpHeaders)
{
using (HttpClient client = new HttpClient())
{
if (httpHeaders != null)
{
foreach (var headerItem in httpHeaders)
{
client.DefaultRequestHeaders.Add(headerItem.Key, headerItem.Value);
}
}
var response = client.GetAsync(url).Result;
//Logger.WriteLog("SerialNumberServiceProxy StatusCode:"+response.StatusCode.ToString(), System.Diagnostics.EventLogEntryType.Warning);
if (!response.IsSuccessStatusCode)
{
//Logger.WriteLog(response.Content.ReadAsStringAsync().Result, System.Diagnostics.EventLogEntryType.Error);
ErrorMessage errorResult = null;
try
{
errorResult = response.Content.ReadAsAsync<ErrorMessage>().Result;
}
catch
{
using (var stream = response.Content.ReadAsStreamAsync().Result)
{
byte[] arrayByte = new byte[stream.Length];
stream.Read(arrayByte, 0, (int)stream.Length);
throw new Exception(new UTF8Encoding().GetString(arrayByte));
}
}
if (errorResult != null)
{
throw new Exception("1");
//throw new UtilityException(errorResult.Code, errorResult.Message);
}
}
}
}
/// <summary>
/// get获取
/// </summary>
/// <typeparam name="T">返回的数据类型</typeparam>
/// <param name="url">服务地址</param>
/// <returns></returns>
public static T Get<T>(string url, Dictionary<string, string> httpHeaders)
{
T result = default(T);
using (HttpClient client = new HttpClient())
{
if (httpHeaders != null)
{
foreach (var headerItem in httpHeaders)
{
client.DefaultRequestHeaders.Add(headerItem.Key, headerItem.Value);
}
}
var response = client.GetAsync(url).Result;
//Logger.WriteLog("SerialNumberServiceProxy StatusCode:"+response.StatusCode.ToString(), System.Diagnostics.EventLogEntryType.Warning);
if (!response.IsSuccessStatusCode)
{
//Logger.WriteLog(response.Content.ReadAsStringAsync().Result, System.Diagnostics.EventLogEntryType.Error);
ErrorMessage errorResult = null;
try
{
errorResult = response.Content.ReadAsAsync<ErrorMessage>().Result;
}
catch
{
using (var stream = response.Content.ReadAsStreamAsync().Result)
{
byte[] arrayByte = new byte[stream.Length];
stream.Read(arrayByte, 0, (int)stream.Length);
throw new Exception(new UTF8Encoding().GetString(arrayByte));
}
}
if (errorResult != null)
{
throw new Exception("1");
//throw new UtilityException(errorResult.Code, errorResult.Message);
}
}
else
{
return response.Content.ReadAsAsync<T>().Result;
}
}
return result;
}
}
}