From 09d39bd7f1bfc72b78e0060c197562610a0ca9f8 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 05 九月 2025 14:37:36 +0800
Subject: [PATCH] feat:开发

---
 FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpProvider/DefaultResourceHttpProvider.cs |   55 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpProvider/DefaultResourceHttpProvider.cs b/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpProvider/DefaultResourceHttpProvider.cs
index 936b8b2..08a3ec5 100644
--- a/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpProvider/DefaultResourceHttpProvider.cs
+++ b/FlexJobApi.Core/Utils/ResourceUtils/ResourceHttpProvider/DefaultResourceHttpProvider.cs
@@ -1,9 +1,13 @@
 锘縰sing Furion;
+using Furion.DatabaseAccessor;
+using Furion.DataEncryption;
 using Furion.HttpRemote;
+using Microsoft.EntityFrameworkCore;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Net.Http.Headers;
+using System.Security.Claims;
 using System.Text;
 using System.Threading.Tasks;
 
@@ -16,21 +20,54 @@
     {
         public async Task<string> SendAsStringAsync(HttpRequestBuilder builder)
         {
-            var token = App.HttpContext.Request.Headers["Authorization"].ToString();
-            if (token.IsNotNull())
+            var httpRemoteService = App.GetRequiredService<IHttpRemoteService>();
+            builder = WithHeader(builder, "Authorization");
+            builder = WithHeader(builder, "X-Authorization");
+            var response = await httpRemoteService.SendAsStringAsync(builder);
+            try
             {
-                builder = builder.WithHeader("Authorization", token);
-                //builder = builder.AddAuthentication(new AuthenticationHeaderValue("Authorization", token));
+                var result = response.JsonTo(new
+                {
+                    Code = 0
+                });
+                if (result.Code == 401)
+                {
+                    var accessToken = GetHeaderValue(builder, "Authorization");
+                    var logier = await accessToken.GetCurrentLogier();
+                    if (logier != null)
+                    {
+                        builder = WithHeader(builder, "Authorization", $"Bearer {logier.AccessToken}");
+                        builder = WithHeader(builder, "X-Authorization", $"Bearer {logier.RefreshToken}");
+                        response = await httpRemoteService.SendAsStringAsync(builder);
+                    }
+                }
             }
+            catch { }
+            return response;
+        }
 
-            var refreshToken = App.HttpContext.Request.Headers["X-Authorization"].ToString();
-            if (refreshToken.IsNotNull())
+        public string GetHeaderValue(HttpRequestBuilder builder, string name)
+        {
+            string value = null;
+            if (builder.Headers?.ContainsKey(name) ?? false)
             {
-                builder = builder.WithHeader("X-Authorization", refreshToken);
-                //builder = builder.AddAuthentication(new AuthenticationHeaderValue("X-Authorization", refreshToken));
+                value = builder.Headers[name].FirstOrDefault();
             }
+            else if (App.HttpContext.Request.Headers.ContainsKey(name))
+            {
+                value = App.HttpContext.Request.Headers[name].ToString();
+            }
+            return value;
+        }
 
-            return await App.GetRequiredService<IHttpRemoteService>().SendAsStringAsync(builder);
+        private HttpRequestBuilder WithHeader(HttpRequestBuilder builder, string name, string value = null)
+        {
+            value ??= GetHeaderValue(builder, name);
+            if (value.IsNotNull())
+            {
+                builder = builder.WithHeader(name, value, replace: true);
+            }
+            return builder;
         }
     }
 }

--
Gitblit v1.9.1