using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.LogHelper;
namespace WIDESEA_Core.Helper
{
public class HttpHelper
{
///
/// 异步发送HTTP GET请求并返回响应内容
///
/// 请求的服务地址
/// 响应内容类型,默认为application/json
/// 请求头字典,可选参数
/// 返回请求结果的字符串内容
/// 当请求过程中发生错误时抛出异常
///
/// 方法会自动记录请求日志,包含请求地址、响应内容和耗时等信息
/// 默认请求超时时间为60秒
///
public static async Task GetAsync(string serviceAddress, string contentType = "application/json", Dictionary? headers = null)
{
string result = string.Empty;
DateTime beginDate = DateTime.Now;
try
{
using HttpClient httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0, 0, 60);
if (headers != null)
{
foreach (var header in headers)
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
}
result = await httpClient.GetAsync(serviceAddress).Result.Content.ReadAsStringAsync();
return result;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
Logger.Add(serviceAddress, "", result, beginDate);
}
}
///
/// 异步发送HTTP POST请求
///
/// 服务地址
/// 请求JSON数据
/// 内容类型,默认为application/json
/// 请求头字典
/// 返回响应内容字符串,失败时抛出异常
///
/// 自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
///
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 (var header in headers)
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
}
result = await httpClient.PostAsync(serviceAddress, httpContent).Result.Content.ReadAsStringAsync();
}
return result;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
Logger.Add(serviceAddress, requestJson == null ? "": requestJson, result, beginDate);
}
}
///
/// 发送HTTP GET请求到指定服务地址
///
/// 请求的服务地址
/// 请求内容类型,默认为application/json
/// 请求头字典,可选参数
/// 返回服务响应字符串
/// 当请求发生错误时抛出异常
/// ///
/// 该方法会自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
///
public static string Get(string serviceAddress, string contentType = "application/json", Dictionary? headers = null)
{
string result = string.Empty;
DateTime beginDate = DateTime.Now;
try
{
using HttpClient httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0, 0, 60);
if (headers != null)
{
foreach (var header in headers)
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
}
result = httpClient.GetStringAsync(serviceAddress).Result;
return result;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
Logger.Add(serviceAddress, "", result, beginDate);
}
}
///
/// 发送HTTP POST请求到指定服务地址
///
/// 服务地址URL
/// 请求的JSON数据
/// 内容类型,默认为application/json
/// 请求头字典
/// 返回服务端响应内容
/// 当请求发生异常时抛出
///
/// 该方法会自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
///
public static string Post(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 (var header in headers)
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
}
result = httpClient.PostAsync(serviceAddress, httpContent).Result.Content.ReadAsStringAsync().Result;
}
return result;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
}
}
}
}