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;
}
///
/// 获取单例Creator
///
///
public static HttpClientCreator GetSingleton(HttpConfig config)
{
if (_singleton == null)
{
_singleton = new HttpClientCreator(config);
}
return _singleton;
}
///
/// 根据配置生成creater
///
///
public HttpClientCreator()
{
PluginSetting setting = PluginSetting.Instance;
TimeOut = setting.TimeOut;
BaseAddress = setting.BaseAddress;
ClientUsername = PdmUser.LoginUser?.username;
Token = PdmUser.LoginUser?.token;
}
///
/// 根据配置生成creater
///
///
public HttpClientCreator(HttpConfig config)
{
TimeOut = config.Timeout;
BaseAddress = config.BaseAddress;
ClientUsername = PdmUser.LoginUser?.username;
Token = PdmUser.LoginUser?.token;
}
///
/// 创建客户端
///
///
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;
}
///
/// 单例客户端
///
///
public HttpClient GetInstance()
{
if (_instance == null)
{
_instance = GetClient();
}
return _instance;
}
public static Result GetSyncAction(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(url, data);
}
public static Task> PostAsyncAction(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(url, data);
}
public static Result PostSyncAction(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(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; }
}
///
/// Http工具基础配置
///
/// 超时时间
/// 基础URL
/// 客户端用户名,需要在PDM里注册
public HttpConfig(int timeout, string baseAddress, string clientUsername)
{
_Timeout = timeout;
_BaseAddress = baseAddress;
_ClientUsername = clientUsername;
}
///
/// Http工具基础配置
///
/// 超时时间
/// 基础URL
public HttpConfig(int timeout, string baseAddress)
{
_Timeout = timeout;
_BaseAddress = baseAddress;
_ClientUsername = System.Environment.UserName;
}
///
/// Http工具基础配置,timeout默认300
///
/// 基础URL
public HttpConfig(string baseAddress)
{
_Timeout = 600;
_BaseAddress = baseAddress;
_ClientUsername = System.Environment.UserName;
}
}
}