From c8b6903d85e7ceef504a198b4bdfc6b72a73fe19 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 08 八月 2025 13:29:47 +0800 Subject: [PATCH] fix:bug --- FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs | 64 +++++++++---------------------- 1 files changed, 19 insertions(+), 45 deletions(-) diff --git a/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs b/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs index d1749ca..b9d51e0 100644 --- a/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs +++ b/FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs @@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Routing; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; @@ -44,48 +45,12 @@ /// <param name="request"></param> /// <param name="provider"></param> /// <returns></returns> - public static async Task<TResponse> SendHttpAsync<TRequest, TResponse>( + public static Task<TResponse> SendHttpAsync<TRequest, TResponse>( TRequest request, IResourceHttpProvider provider = null) where TRequest : class, new() { - var requestTypeFullName = typeof(TRequest).FullName; - var resource = await Db.GetRepository<Resource>().AsQueryable().AsNoTracking() - .Where(it => !it.IsExpired && it.RequestTypeFullName == requestTypeFullName) - .FirstOrDefaultAsync(); - var domain = await GetHealthyServiceDomain(resource); - var httpRemoteService = App.GetRequiredService<IHttpRemoteService>(); - var builder = HttpRequestBuilder.Create(resource.GetHttpMethod(), $"{domain}{resource.Route}"); - 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.SendAsAsync<TResponse>(httpRemoteService, builder); - return response; - } - - /// <summary> - /// 鑾峰彇鍋ュ悍鏈嶅姟鍩熷悕 - /// </summary> - /// <param name="resource"></param> - /// <returns></returns> - public static async Task<string> GetHealthyServiceDomain(Resource resource) - { - var client = App.GetRequiredService<IConsulClient>(); - var queryResult = await client.Health.Service(resource.ServiceName, null, true); - if (queryResult.StatusCode != System.Net.HttpStatusCode.OK) - throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔resource.Service}"); - - var domains = queryResult.Response - .Select(s => $"http://{s.Service.Address}:{s.Service.Port}") - .ToList(); - if (domains.IsNull()) - throw Oops.Oh(EnumErrorCodeType.s404, $"寰湇鍔resource.Service}"); - // 杞閫夋嫨瀹炰緥 - int randomIndex = new Random().Next(domains.Count); - return domains[randomIndex]; + return App.GetRequiredService<ResourceHttpUtils>().SendHttpAsync<TRequest, TResponse>(request, provider); } /// <summary> @@ -152,9 +117,9 @@ model.ResponseTypeName = responseType.GetCSharpFriendlyName(); model.ResponseTypeFullName = responseType.FullName; } - - models.Add(model); + + await App.GetRequiredService<IDistributedCache>().SetStringAsync($"ResourceModel|{model.RequestTypeFullName}", model.ToJson()); } } @@ -258,9 +223,10 @@ code += $@" [AllowAnonymous]"; } + var result = resource.ResponseTypeName.IsNull() ? "Task" : $"Task<{resource.ResponseTypeName}>"; code += $@" [Http{resource.Method}] - public Task<{resource.ResponseTypeName}> {resource.ActionName}({resource.RequestTypeName} request) + public {result} {resource.ActionName}({resource.RequestTypeName} request) {{ return mediator.Send(request); }} @@ -268,10 +234,18 @@ }} }} "; - var dynamicAssembly = App.CompileCSharpClassCode(code); - provider.AddAssembliesWithNotifyChanges(dynamicAssembly); - var dynamicAssemblyName = dynamicAssembly.GetName().Name; - resource.DynamicAssemblyName = dynamicAssemblyName; + try + { + var dynamicAssembly = App.CompileCSharpClassCode(code); + provider.AddAssembliesWithNotifyChanges(dynamicAssembly); + var dynamicAssemblyName = dynamicAssembly.GetName().Name; + resource.DynamicAssemblyName = dynamicAssemblyName; + } + catch (Exception ex) + { + Console.WriteLine(code); + throw; + } } } -- Gitblit v1.9.1