sunpengfei
2025-08-08 2da5c6be190d8078393eb2df777863931218ad19
FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs
@@ -42,8 +42,11 @@
        /// <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>(TRequest request)
        public static async Task<TResponse> SendHttpAsync<TRequest, TResponse>(
            TRequest request,
            IResourceHttpProvider provider = null)
            where TRequest : class, new()
        {
            var requestTypeFullName = typeof(TRequest).FullName;
@@ -52,46 +55,14 @@
                .FirstOrDefaultAsync();
            var domain = await GetHealthyServiceDomain(resource);
            var httpRemoteService = App.GetRequiredService<IHttpRemoteService>();
            var token = App.HttpContext.Request.Headers["Authorization"].ToString();
            var refreshToken = App.HttpContext.Request.Headers["X-Authorization"].ToString();
            TResponse response;
            switch (resource.Method)
            {
                case EnumResourceMethod.Get:
                    response = await httpRemoteService.GetAsAsync<TResponse>(
                        $"{domain}{resource.Route}",
                        it =>
                            it.WithQueryParameters(request)
                            .AddAuthentication(new AuthenticationHeaderValue("Authorization", token))
                            .AddAuthentication(new AuthenticationHeaderValue("X-Authorization", refreshToken)));
                    break;
                case EnumResourceMethod.Post:
                    response = await httpRemoteService.PostAsAsync<TResponse>(
                        $"{domain}{resource.Route}",
                        it =>
                            it.SetJsonContent(request)
                            .WithHeader("Authorization", token)
                            .WithHeader("X-Authorization", refreshToken));
                    break;
                case EnumResourceMethod.Put:
                    response = await httpRemoteService.PutAsAsync<TResponse>(
                        $"{domain}{resource.Route}",
                        it =>
                            it.SetJsonContent(request)
                            .AddAuthentication(new AuthenticationHeaderValue("Authorization", token))
                            .AddAuthentication(new AuthenticationHeaderValue("X-Authorization", refreshToken)));
                    break;
                case EnumResourceMethod.Delete:
                    response = await httpRemoteService.DeleteAsAsync<TResponse>(
                        $"{domain}{resource.Route}",
                        it =>
                            it.SetJsonContent(request)
                            .AddAuthentication(new AuthenticationHeaderValue("Authorization", token))
                            .AddAuthentication(new AuthenticationHeaderValue("X-Authorization", refreshToken)));
                    break;
                default:
                    throw Oops.Oh(EnumErrorCodeType.s400, $"不支持请求方式{resource.Method}");
            }
            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;
        }