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; } } }