using PdmSwPlugin.Common.Entity.System;
|
using PdmSwPlugin.Common.Setting;
|
using System;
|
using System.Net.Http;
|
using System.Threading.Tasks;
|
|
namespace PdmSwPlugin.Common.Util.Http
|
{
|
public class HttpClientCreator
|
{
|
private static readonly string ApiKey = "X-Access-Token";
|
private static readonly string PluginKey = "Client-Access-Token";
|
public static readonly string BASE_CLIENT_NAME = "BaseClient";
|
|
public static HttpClientCreator _singleton;
|
|
public readonly int TimeOut;
|
public readonly string BaseAddress;
|
public readonly string ClientUsername;
|
public readonly string Token;
|
|
|
private HttpClient _instance;
|
public HttpClient Client
|
{
|
get => _instance;
|
}
|
|
/// <summary>
|
/// 获取单例Creator
|
/// </summary>
|
/// <returns></returns>
|
public static HttpClientCreator GetSingleton(HttpConfig config)
|
{
|
if (_singleton == null)
|
{
|
_singleton = new HttpClientCreator(config);
|
}
|
return _singleton;
|
}
|
|
/// <summary>
|
/// 根据配置生成creater
|
/// </summary>
|
/// <param name="config"></param>
|
public HttpClientCreator()
|
{
|
|
PluginSetting setting = PluginSetting.Instance;
|
TimeOut = setting.TimeOut;
|
BaseAddress = setting.BaseAddress;
|
ClientUsername = PdmUser.LoginUser?.username;
|
Token = PdmUser.LoginUser?.token;
|
}
|
|
/// <summary>
|
/// 根据配置生成creater
|
/// </summary>
|
/// <param name="config"></param>
|
public HttpClientCreator(HttpConfig config)
|
{
|
TimeOut = config.Timeout;
|
BaseAddress = config.BaseAddress;
|
ClientUsername = PdmUser.LoginUser?.username;
|
Token = PdmUser.LoginUser?.token;
|
}
|
|
/// <summary>
|
/// 创建客户端
|
/// </summary>
|
/// <returns></returns>
|
public HttpClient GetClient()
|
{
|
PluginSetting setting = PluginSetting.Instance;
|
HttpClient client = new HttpClient();
|
client.BaseAddress = new Uri(BaseAddress);
|
client.Timeout = TimeSpan.FromSeconds(TimeOut);
|
//if (setting.ClassicLogin)
|
//{
|
// client.DefaultRequestHeaders.Add(ApiKey, Token);
|
//}
|
//else
|
//{
|
// client.DefaultRequestHeaders.Add(PluginKey, ClientUsername);
|
//}
|
client.DefaultRequestHeaders.Add(PluginKey, ClientUsername);
|
return client;
|
}
|
|
/// <summary>
|
/// 单例客户端
|
/// </summary>
|
/// <returns></returns>
|
public HttpClient GetInstance()
|
{
|
if (_instance == null)
|
{
|
_instance = GetClient();
|
}
|
return _instance;
|
}
|
|
public static Result<T> GetSyncAction<T>(string url, object data)
|
{
|
HttpClient client = new HttpClient();
|
PluginSetting setting = PluginSetting.Instance;
|
|
client.BaseAddress = new Uri(setting.BaseAddress);
|
client.Timeout = TimeSpan.FromSeconds(setting.TimeOut);
|
|
return client.GetSyncAction<T>(url, data);
|
}
|
|
public static Task<Result<T>> PostAsyncAction<T>(string url, object data)
|
{
|
HttpClient client = new HttpClient();
|
PluginSetting setting = PluginSetting.Instance;
|
|
client.BaseAddress = new Uri(setting.BaseAddress);
|
client.Timeout = TimeSpan.FromSeconds(setting.TimeOut);
|
|
return client.PostAsyncAction<T>(url, data);
|
}
|
|
public static Result<T> PostSyncAction<T>(string url, object data)
|
{
|
HttpClient client = new HttpClient();
|
PluginSetting setting = PluginSetting.Instance;
|
|
client.BaseAddress = new Uri(setting.BaseAddress);
|
client.Timeout = TimeSpan.FromSeconds(setting.TimeOut);
|
|
return client.PostSyncAction<T>(data, url);
|
}
|
|
}
|
|
public class HttpConfig
|
{
|
private int _Timeout;
|
|
public int Timeout
|
{
|
get { return _Timeout; }
|
}
|
|
private string _BaseAddress;
|
|
public string BaseAddress
|
{
|
get { return _BaseAddress; }
|
}
|
|
private string _ClientUsername;
|
|
public string ClientUsername
|
{
|
get { return _ClientUsername; }
|
}
|
|
/// <summary>
|
/// Http工具基础配置
|
/// </summary>
|
/// <param name="timeout">超时时间</param>
|
/// <param name="baseAddress">基础URL</param>
|
/// <param name="clientUsername">客户端用户名,需要在PDM里注册</param>
|
public HttpConfig(int timeout, string baseAddress, string clientUsername)
|
{
|
_Timeout = timeout;
|
_BaseAddress = baseAddress;
|
_ClientUsername = clientUsername;
|
}
|
|
/// <summary>
|
/// Http工具基础配置
|
/// </summary>
|
/// <param name="timeout">超时时间</param>
|
/// <param name="baseAddress">基础URL</param>
|
public HttpConfig(int timeout, string baseAddress)
|
{
|
_Timeout = timeout;
|
_BaseAddress = baseAddress;
|
_ClientUsername = System.Environment.UserName;
|
}
|
|
/// <summary>
|
/// Http工具基础配置,timeout默认300
|
/// </summary>
|
/// <param name="baseAddress">基础URL</param>
|
public HttpConfig(string baseAddress)
|
{
|
_Timeout = 600;
|
_BaseAddress = baseAddress;
|
_ClientUsername = System.Environment.UserName;
|
}
|
}
|
}
|