You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
365 lines
11 KiB
365 lines
11 KiB
using Newtonsoft.Json;
|
|
using System.Text;
|
|
using Tiobon.Core.Common.Helper;
|
|
using Tiobon.Core.Helper;
|
|
using Tiobon.Core.Model;
|
|
|
|
namespace Tiobon.Core.Common.Https.HttpPolly;
|
|
|
|
public class HttpPollyHelper : IHttpPollyHelper
|
|
{
|
|
private readonly IHttpClientFactory _clientFactory;
|
|
|
|
public HttpPollyHelper(IHttpClientFactory httpClientFactory)
|
|
{
|
|
_clientFactory = httpClientFactory;
|
|
}
|
|
|
|
public async Task<T> PostAsync<T, R>(HttpEnum httpEnum, string url, R request, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var stringContent = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
|
|
var response = await client.PostAsync(url, stringContent);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
string result = await response.Content.ReadAsStringAsync();
|
|
return JsonConvert.DeserializeObject<T>(result);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<T> PostAsync<T>(HttpEnum httpEnum, string url, string request, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var stringContent = new StringContent(request, Encoding.UTF8, "application/json");
|
|
var response = await client.PostAsync(url, stringContent);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
string result = await response.Content.ReadAsStringAsync();
|
|
return JsonConvert.DeserializeObject<T>(result);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<string> PostAsync<R>(HttpEnum httpEnum, string url, R request, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var stringContent = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
|
|
var response = await client.PostAsync(url, stringContent);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
return await response.Content.ReadAsStringAsync();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<string> PostAsync(HttpEnum httpEnum, string url, string request, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var stringContent = new StringContent(request, Encoding.UTF8, "application/json");
|
|
var response = await client.PostAsync(url, stringContent);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
return await response.Content.ReadAsStringAsync();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<T> GetAsync<T>(HttpEnum httpEnum, string url, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var response = await client.GetAsync(url);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
string result = await response.Content.ReadAsStringAsync();
|
|
return JsonConvert.DeserializeObject<T>(result);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<string> GetAsync(HttpEnum httpEnum, string url, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var response = await client.GetAsync(url);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
return await response.Content.ReadAsStringAsync(); ;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<T> PutAsync<T, R>(HttpEnum httpEnum, string url, R request, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var stringContent = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
|
|
var response = await client.PutAsync(url, stringContent);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
string result = await response.Content.ReadAsStringAsync();
|
|
return JsonConvert.DeserializeObject<T>(result);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<T> PutAsync<T>(HttpEnum httpEnum, string url, string request, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var stringContent = new StringContent(request, Encoding.UTF8, "application/json");
|
|
var response = await client.PutAsync(url, stringContent);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
string result = await response.Content.ReadAsStringAsync();
|
|
return JsonConvert.DeserializeObject<T>(result);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<T> DeleteAsync<T>(HttpEnum httpEnum, string url, Dictionary<string, string> headers = null)
|
|
{
|
|
try
|
|
{
|
|
var client = _clientFactory.CreateClient(httpEnum.ToString());
|
|
if (headers != null)
|
|
{
|
|
foreach (var header in headers)
|
|
{
|
|
if (!client.DefaultRequestHeaders.Contains(header.Key))
|
|
{
|
|
client.DefaultRequestHeaders.Add(header.Key, header.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var response = await client.DeleteAsync(url);
|
|
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
string result = await response.Content.ReadAsStringAsync();
|
|
return JsonConvert.DeserializeObject<T>(result);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception($"Http Error StatusCode:{response.StatusCode}");
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
throw;
|
|
}
|
|
|
|
}
|
|
|
|
public async Task DownLoad(string fileUrl, string destinationPath)
|
|
{
|
|
var client = _clientFactory.CreateClient();
|
|
destinationPath = FileHelper.GetPhysicsPath() + destinationPath;
|
|
HttpResponseMessage response = await client.GetAsync(fileUrl, HttpCompletionOption.ResponseHeadersRead);
|
|
response.EnsureSuccessStatusCode(); // 确保请求成功
|
|
|
|
using (Stream contentStream = await response.Content.ReadAsStreamAsync(),
|
|
fileStream = new FileStream(destinationPath, FileMode.Create, FileAccess.Write, FileShare.None, 8192, true))
|
|
{
|
|
await contentStream.CopyToAsync(fileStream);
|
|
}
|
|
}
|
|
}
|
|
|