using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Headers; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace Tiobon.Core.Common.Helper { /// /// Linq扩展 /// public static class ExpressionExtensions_Nacos { #region Nacos NamingService private static string GetServiceUrl(Nacos.V2.INacosNamingService serv, string ServiceName, string Group, string apiurl) { try { var instance = serv.SelectOneHealthyInstance(ServiceName, Group).GetAwaiter().GetResult(); var host = $"{instance.Ip}:{instance.Port}"; if (instance.Metadata.ContainsKey("endpoint")) host = instance.Metadata["endpoint"]; var baseUrl = instance.Metadata.TryGetValue("secure", out _) ? $"https://{host}" : $"http://{host}"; if (string.IsNullOrWhiteSpace(baseUrl)) { return ""; } return $"{baseUrl}{apiurl}"; } catch (Exception e) { Console.WriteLine(e.Message); } return ""; } public static async Task Cof_NaoceGet(this Nacos.V2.INacosNamingService serv, string ServiceName, string Group, string apiurl, Dictionary Parameters = null) { try { var url = GetServiceUrl(serv, ServiceName, Group, apiurl); if (string.IsNullOrEmpty(url)) return ""; if (Parameters != null && Parameters.Any()) { StringBuilder sb = new StringBuilder(); foreach (var pitem in Parameters) { sb.Append($"{pitem.Key}={pitem.Value}&"); } url = $"{url}?{sb.ToString().Trim('&')}"; } HttpHelper.Httpclient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); var result = await HttpHelper.Httpclient.GetAsync(url); return await result.Content.ReadAsStringAsync(); } catch (Exception e) { Console.WriteLine(e.Message); } return ""; } public static async Task Cof_NaocePostForm(this Nacos.V2.INacosNamingService serv, string ServiceName, string Group, string apiurl, Dictionary Parameters) { try { var url = GetServiceUrl(serv, ServiceName, Group, apiurl); if (string.IsNullOrEmpty(url)) return ""; var content = (Parameters != null && Parameters.Any()) ? new FormUrlEncodedContent(Parameters) : null; HttpHelper.Httpclient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var result = await HttpHelper.Httpclient.PostAsync(url, content); return await result.Content.ReadAsStringAsync(); //.GetAwaiter().GetResult(); } catch (Exception e) { Console.WriteLine(e.Message); } return ""; } public static async Task Cof_NaocePostJson(this Nacos.V2.INacosNamingService serv, string ServiceName, string Group, string apiurl, string jSonData) { try { var url = GetServiceUrl(serv, ServiceName, Group, apiurl); if (string.IsNullOrEmpty(url)) return ""; HttpHelper.Httpclient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var result = await HttpHelper.Httpclient.PostAsync(url, new StringContent(jSonData, Encoding.UTF8, "application/json")); return await result.Content.ReadAsStringAsync(); //.GetAwaiter().GetResult(); //httpClient.BaseAddress = new Uri("https://www.testapi.com"); //httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); } catch (Exception e) { Console.WriteLine(e.Message); } return ""; } public static async Task Cof_NaocePostFile(this Nacos.V2.INacosNamingService serv, string ServiceName, string Group, string apiurl, Dictionary Parameters) { try { var url = GetServiceUrl(serv, ServiceName, Group, apiurl); if (string.IsNullOrEmpty(url)) return ""; var content = new MultipartFormDataContent(); foreach (var pitem in Parameters) { content.Add(new ByteArrayContent(pitem.Value), "files", pitem.Key); } HttpHelper.Httpclient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var result = await HttpHelper.Httpclient.PostAsync(url, content); return await result.Content.ReadAsStringAsync(); //.GetAwaiter().GetResult(); } catch (Exception e) { //InfluxdbHelper.GetInstance().AddLog("Cof_NaocePostFile.Err", ee); Console.WriteLine(e.Message); } return ""; } #endregion } }