using Newtonsoft.Json;
using System.Net;
using System.Net.Http.Headers;
using System.Text;
using WIDESEA_Common.Log;
namespace WIDESEA_Comm.Http
{
public class HttpHelpers
{
private const int Timeout = 20 * 1000;
///
/// post请求
///
///
/// 参数
/// 接口名称,用于日志分类
///
public static string Post(string url, object parm, string rquestName = "")
{
HttpWebResponse response = null;
StreamReader resultReader = null;
string responseContent = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = Timeout;
request.Method = "POST";
request.ContentType = "application/json; charset=UTF-8";
parm = parm ?? "";
byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(parm));
request.ContentLength = data.Length;
using (Stream newStream = request.GetRequestStream())
{
newStream.Write(data, 0, data.Length);
};
response = (HttpWebResponse)request.GetResponse();
Stream webStream = response.GetResponseStream();
if (webStream == null)
{
throw new Exception("Network error");
}
int statsCode = (int)response.StatusCode;
resultReader = new StreamReader(webStream, Encoding.UTF8);
responseContent = resultReader.ReadToEnd();
if (response != null)
response.Close();
if (resultReader != null)
resultReader.Close();
if (statsCode != 200)
{
throw new Exception("异常,响应码:" + statsCode.ToString());
}
//WriteLog.Write_Log("System/API请求", rquestName, "请求成功", new { 请求报文 = parm, 接收报文 = responseContent });
return responseContent;
}
catch (Exception ex)
{
WriteLog.Write_Log("API", rquestName, "请求异常", new { 请求报文 = parm, 接收报文 = responseContent, 错误 = ex.Message });
throw ex;
}
}
public static async Task PostAsync(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary? headers = null)
{
string result = string.Empty;
DateTime beginDate = DateTime.Now;
try
{
using (HttpContent httpContent = new StringContent(requestJson))
{
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
using HttpClient httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0, 0, 60);
if (headers != null)
{
foreach (KeyValuePair header in headers)
{
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
}
}
result = await httpClient.PostAsync(serviceAddress, httpContent).Result.Content.ReadAsStringAsync();
}
return result;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
}
}
///
/// post请求
///
///
/// 参数
/// 接口名称,用于日志分类
///
public static T Post(string url, object parm, string rquestName = "") where T : class
{
HttpWebResponse response = null;
StreamReader resultReader = null;
string responseContent = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = Timeout;
request.Method = "POST";
request.ContentType = "application/json; charset=UTF-8";
parm = parm ?? "";
byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(parm));
request.ContentLength = data.Length;
using (Stream newStream = request.GetRequestStream())
{
newStream.Write(data, 0, data.Length);
};
response = (HttpWebResponse)request.GetResponse();
Stream webStream = response.GetResponseStream();
if (webStream == null)
{
throw new Exception("Network error");
}
int statsCode = (int)response.StatusCode;
resultReader = new StreamReader(webStream, Encoding.UTF8);
responseContent = resultReader.ReadToEnd();
if (response != null)
response.Close();
if (resultReader != null)
resultReader.Close();
if (statsCode != 200)
{
throw new Exception("异常,响应码:" + statsCode.ToString());
}
//WriteLog.Write_Log("System/API请求", rquestName, "请求成功", new { 请求报文 = parm, 接收报文 = responseContent });
return JsonConvert.DeserializeObject(responseContent);
}
catch (Exception ex)
{
WriteLog.Write_Log("API", rquestName, "请求异常", new { 请求报文 = parm, 接收报文 = responseContent, 错误 = ex.Message });
throw ex;
}
}
///
/// get请求
///
///
///
/// 请求参数,添加在url
///
///
public static T Get(string url, object parm = null, string rquestName = "") where T : class
{
HttpWebResponse response = null;
StreamReader resultReader = null;
string responseContent = string.Empty;
try
{
if (parm != null)
{
var datas = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(parm));
var keyList = datas.Keys;
int index = 0;
foreach (var key in datas.Keys)
{
if (index == 0)
{
url += $"?{key}={datas[key]}";
}
else
{
url += $"&{key}={datas[key]}";
}
index++;
}
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = Timeout;
request.Method = "GET";
request.ContentType = "application/json; charset=UTF-8";
response = (HttpWebResponse)request.GetResponse();
Stream webStream = response.GetResponseStream();
if (webStream == null)
{
throw new Exception("Network error");
}
int statsCode = (int)response.StatusCode;
resultReader = new StreamReader(webStream, Encoding.UTF8);
responseContent = resultReader.ReadToEnd();
if (response != null)
response.Close();
if (resultReader != null)
resultReader.Close();
if (statsCode != 200)
{
throw new Exception("异常,响应码:" + statsCode.ToString());
}
WriteLog.Write_Log("API", rquestName, "请求成功", new { 请求报文 = parm, 接收报文 = responseContent });
return JsonConvert.DeserializeObject(responseContent);
}
catch (Exception ex)
{
WriteLog.Write_Log("API", rquestName, "请求异常", new { 请求报文 = parm, 接收报文 = responseContent, 错误 = ex.Message });
throw ex;
}
}
}
}