sunpengfei
2025-08-29 86a5e4ab19937003d26984283f878e0d2cb7f807
FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpUtils.cs
@@ -7,6 +7,7 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Distributed;
using RabbitMQ.Client;
using RTools_NTS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
@@ -20,16 +21,45 @@
{
    public static class ResourceHttpUtils
    {
        public static async Task<string> SendHttpAsync(this object request, string serviceName, string route, EnumResourceMethod method, EnumResourceHttpProvider? provider = null)
        /// <summary>
        /// 发送请求
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <param name="serviceName">服务名称</param>
        /// <param name="route">路由</param>
        /// <param name="method">请求方式</param>
        /// <param name="provider">资源提供者</param>
        /// <param name="accessToken">访问令牌</param>
        /// <param name="refreshToken">刷新令牌</param>
        /// <returns></returns>
        public static async Task<string> SendHttpAsync(
            this object request,
            string serviceName,
            string route,
            EnumResourceMethod method,
            EnumResourceHttpProvider? provider = null,
            string accessToken = null,
            string refreshToken = null)
        {
            serviceName = App.GetConfig<string>($"{serviceName}:ServiceName");
            var url = await GetUrl(serviceName, route);
            var builder = HttpRequestBuilder.Create(method.GetMethod(), url);
            var builder = HttpRequestBuilder.Create(method.GetHttpMethod(), url);
            if (method == EnumResourceMethod.Get)
                builder = builder.WithQueryParameters(request);
            else
                builder = builder.SetJsonContent(request);
            IResourceHttpProvider httpProvider =
            if (accessToken.IsNotNull())
            {
                builder = builder.WithHeader("Authorization", accessToken);
            }
            if (refreshToken.IsNotNull())
            {
                builder = builder.WithHeader("X-Authorization", refreshToken);
            }
            IResourceHttpProvider httpProvider =
                provider == EnumResourceHttpProvider.SystemUser
                ? new SystemUserResourceHttpProvider()
                : provider == EnumResourceHttpProvider.ElectronSignServer
@@ -41,7 +71,17 @@
            return response;
        }
        public static async Task<TResponse> SendHttpAsync<TRequest, TResponse>(this TRequest request, EnumResourceHttpProvider? provider = null)
        /// <summary>
        /// 发送请求
        /// </summary>
        /// <typeparam name="TRequest"></typeparam>
        /// <typeparam name="TResponse"></typeparam>
        /// <param name="request"></param>
        /// <param name="provider"></param>
        /// <returns></returns>
        public static async Task<TResponse> SendHttpAsync<TRequest, TResponse>(
            this TRequest request,
            EnumResourceHttpProvider? provider = null)
        {
            var requestType = typeof(TRequest);
            var resourceAttribute = requestType.GetCustomAttribute<ResourceAttribute>();
@@ -75,7 +115,12 @@
            return response;
        }
        public static HttpMethod GetMethod(this EnumResourceMethod method)
        /// <summary>
        /// 获取请求方式
        /// </summary>
        /// <param name="method"></param>
        /// <returns></returns>
        public static HttpMethod GetHttpMethod(this EnumResourceMethod method)
        {
            switch (method)
            {
@@ -92,6 +137,12 @@
            }
        }
        /// <summary>
        /// 获取健康服务地址
        /// </summary>
        /// <param name="serviceName"></param>
        /// <param name="route"></param>
        /// <returns></returns>
        public static async Task<string> GetUrl(string serviceName, string route)
        {
            var domain = await GetHealthyServiceDomain(serviceName);