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
|
{
|
/// <summary>
|
/// 异步发送HTTP GET请求并返回响应内容
|
/// </summary>
|
/// <param name="serviceAddress">请求的服务地址</param>
|
/// <param name="contentType">响应内容类型,默认为application/json</param>
|
/// <param name="headers">请求头字典,可选参数</param>
|
/// <returns>返回请求结果的字符串内容</returns>
|
/// <exception cref="Exception">当请求过程中发生错误时抛出异常</exception>
|
/// <remarks>
|
/// 方法会自动记录请求日志,包含请求地址、响应内容和耗时等信息
|
/// 默认请求超时时间为60秒
|
/// </remarks>
|
public static async Task<string> GetAsync(string serviceAddress, string contentType = "application/json", Dictionary<string, string>? 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);
|
}
|
}
|
|
/// <summary>
|
/// 异步发送HTTP POST请求
|
/// </summary>
|
/// <param name="serviceAddress">服务地址</param>
|
/// <param name="requestJson">请求JSON数据</param>
|
/// <param name="contentType">内容类型,默认为application/json</param>
|
/// <param name="headers">请求头字典</param>
|
/// <returns>返回响应内容字符串,失败时抛出异常</returns>
|
/// <remarks>
|
/// 自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
|
/// </remarks>
|
public static async Task<string?> PostAsync(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary<string, string>? 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);
|
}
|
}
|
|
/// <summary>
|
/// 发送HTTP GET请求到指定服务地址
|
/// </summary>
|
/// <param name="serviceAddress">请求的服务地址</param>
|
/// <param name="contentType">请求内容类型,默认为application/json</param>
|
/// <param name="headers">请求头字典,可选参数</param>
|
/// <returns>返回服务响应字符串</returns>
|
/// <exception cref="Exception">当请求发生错误时抛出异常</exception>
|
/// /// <remarks>
|
/// 该方法会自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
|
/// </remarks>
|
public static string Get(string serviceAddress, string contentType = "application/json", Dictionary<string, string>? 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);
|
}
|
}
|
|
/// <summary>
|
/// 发送HTTP POST请求到指定服务地址
|
/// </summary>
|
/// <param name="serviceAddress">服务地址URL</param>
|
/// <param name="requestJson">请求的JSON数据</param>
|
/// <param name="contentType">内容类型,默认为application/json</param>
|
/// <param name="headers">请求头字典</param>
|
/// <returns>返回服务端响应内容</returns>
|
/// <exception cref="Exception">当请求发生异常时抛出</exception>
|
/// <remarks>
|
/// 该方法会自动记录请求日志,包含请求地址、请求数据、响应数据和耗时
|
/// </remarks>
|
public static string Post(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary<string, string>? 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);
|
}
|
}
|
}
|
}
|