You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Tiobon.Web.Core/Tiobon.Core.Common/Extensions/ExpressionExtensions_Nacos.cs

152 lines
5.7 KiB

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
{
/// <summary>
/// Linq扩展
/// </summary>
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<string> Cof_NaoceGet(this Nacos.V2.INacosNamingService serv, string ServiceName,
string Group, string apiurl, Dictionary<string, string> 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<string> Cof_NaocePostForm(this Nacos.V2.INacosNamingService serv, string ServiceName,
string Group, string apiurl, Dictionary<string, string> 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<string> 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<string> Cof_NaocePostFile(this Nacos.V2.INacosNamingService serv, string ServiceName,
string Group, string apiurl, Dictionary<string, byte[]> 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
}
}