From 234b9a97eabe4fc6ebd52204ffdd575023a1736f Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期二, 12 八月 2025 09:42:41 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs |   37 +++++++++++++++++++++++++++++--------
 1 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs b/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs
index db7a2db..dd0b166 100644
--- a/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs
+++ b/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs
@@ -1,4 +1,5 @@
-锘縰sing Consul;
+锘縰sing Azure;
+using Consul;
 using Furion;
 using Furion.FriendlyException;
 using Furion.HttpRemote;
@@ -44,8 +45,8 @@
 
             var jsonResourceModels = await distributedCache.GetStringAsync($"ResourceModel|{requestTypeFullName}");
             var resource = jsonResourceModels.JsonTo<ResourceModel>();
-            var domain = await GetHealthyServiceDomain(resource);
-            var builder = HttpRequestBuilder.Create(resource.GetHttpMethod(), $"{domain}{resource.Route}");
+            var url = await GetUrl(resource.ServiceName, resource.Route);
+            var builder = HttpRequestBuilder.Create(resource.GetHttpMethod(), url);
             if (resource.Method == EnumResourceMethod.Get)
                 builder = builder.WithQueryParameters(request);
             else
@@ -56,22 +57,42 @@
             return response;
         }
 
+        public async Task<string> SendHttpAsync(Resource resource, string request, IResourceHttpProvider provider = null)
+        {
+            var url = await GetUrl(resource.ServiceName, resource.Route);
+            var builder = HttpRequestBuilder.Create(resource.GetHttpMethod(), url);
+            if (resource.Method == EnumResourceMethod.Get)
+                builder = builder.WithQueryParameters(request);
+            else
+                builder = builder.SetJsonContent(request);
+            provider = provider ?? new DefaultResourceHttpProvider();
+            builder = provider.AddAuthentication(builder);
+            var response = await provider.SendAsStringAsync(httpRemoteService, builder);
+            return response;
+        }
+
+        public async Task<string> GetUrl(string serviceName, string route)
+        {
+            var domain = await GetHealthyServiceDomain(serviceName);
+            return $"{domain}{route}";
+        }
+
         /// <summary>
         /// 鑾峰彇鍋ュ悍鏈嶅姟鍩熷悕
         /// </summary>
-        /// <param name="resource"></param>
+        /// <param name="serviceName"></param>
         /// <returns></returns>
-        public async Task<string> GetHealthyServiceDomain(ResourceModel resource)
+        public async Task<string> GetHealthyServiceDomain(string serviceName)
         {
-            var queryResult = await consulClient.Health.Service(resource.ServiceName, null, true);
+            var queryResult = await consulClient.Health.Service(serviceName, null, true);
             if (queryResult.StatusCode != System.Net.HttpStatusCode.OK)
-                throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔resource.Service}");
+                throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔serviceName}");
 
             var domains = queryResult.Response
                 .Select(s => $"http://{s.Service.Address}:{s.Service.Port}")
                 .ToList();
             if (domains.IsNull())
-                throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔resource.Service}");
+                throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔serviceName}");
             // 杞閫夋嫨瀹炰緥
             int randomIndex = new Random().Next(domains.Count);
             return domains[randomIndex];

--
Gitblit v1.9.1