using Estsh.Client.Common.Util; using Estsh.Core.Model.Result; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace Estsh.Client.Common.HttpClientUtil { public class HttpClientHelper { /// /// 服务 /// private static IServiceProvider serviceProvider = null; private static HttpClient client = null; private readonly static string encryptKey = "estsh.mes.selectupdate"; /// /// 初始化服务,没给服务对象就自己创建 /// /// 如果是asp.net可以直接抛过来ConfigureServices的services public static void InitService(IServiceProvider provider,string httpClientName) { ArgumentNullException.ThrowIfNull(provider, nameof(provider)); serviceProvider = provider; client = GetHttpClientFactory().CreateClient(httpClientName); } /// /// 得到IHttpClientFactory的对象 /// /// public static IHttpClientFactory GetHttpClientFactory() { return serviceProvider.GetService(); } public static HttpClient GetHttpClient() { return client; } public int Execute(string cmd, Dictionary? Params = null) { RequestBody requestBody = new RequestBody(); requestBody.SqlString = SecurityEncDecrypt.EncryptDES(cmd, encryptKey); if (Params == null) { requestBody.Params = new Dictionary(); } else { requestBody.Params = Params; } string retust = Post("DataHandle/Execute", requestBody); return JsonConvert.DeserializeObject(retust); } public List GetEntityList(string cmd, Dictionary? Params = null) { RequestBody requestBody = new RequestBody(); requestBody.SqlString = SecurityEncDecrypt.EncryptDES(cmd, encryptKey); if (Params == null) { requestBody.Params = new Dictionary(); } else { requestBody.Params = Params; } string retust = Post("DataHandle/GetEntityList", requestBody); return JsonConvert.DeserializeObject>(retust) ; } public object GetScalar(string cmd, Dictionary? Params = null) { RequestBody requestBody = new RequestBody(); requestBody.SqlString = SecurityEncDecrypt.EncryptDES(cmd, encryptKey); if (Params == null) { requestBody.Params = new Dictionary(); } else { requestBody.Params = Params; } string retust = Post("DataHandle/GetScalar", requestBody); return JsonConvert.DeserializeObject(retust); } // // Post请求数据--同步方法 // // 例如/api/Files/UploadFile // 请求参数 // public string Post(string actionUri, RequestBody body) { try { string requestUri = client.BaseAddress + actionUri; var content = new StringContent(JsonConvert.SerializeObject(body),Encoding.UTF8, "application/json"); var result = client.PostAsync(requestUri, content).GetAwaiter().GetResult(); if (result.StatusCode == HttpStatusCode.OK) { string str = result.Content.ReadAsStringAsync().Result; return str; } else { return string.Empty; } } catch (Exception ex) { LogHelper.Error("调用API异常", ex); throw ex; } } // // Post请求数据-异步方法 // // 例如/api/Files/UploadFile // 请求参数 // public async Task PostAsync(string actionUri, RequestBody body) { try { string requestUri = client.BaseAddress + actionUri; var content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json"); var result = await client.PostAsync(requestUri, content); if (result.StatusCode == HttpStatusCode.OK) { string str = result.Content.ReadAsStringAsync().Result; return str; } else { return string.Empty; } } catch (Exception ex) { LogHelper.Error("调用API异常", ex); throw ex; } } } }