From ed5ea9ae4c2e1a9f114e2302a9b3ca20168535c8 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期二, 12 八月 2025 09:55:56 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs | 93 +++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 86 insertions(+), 7 deletions(-) diff --git a/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs b/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs index 8cf27e5..bc12627 100644 --- a/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs +++ b/FlexJobApi.Core/Utils/ResourceUtils/IResourceHttpProvider.cs @@ -1,7 +1,12 @@ -锘縰sing Furion; +锘縰sing Azure; +using Azure.Core; +using Furion; using Furion.FriendlyException; using Furion.HttpRemote; using Furion.Shapeless; +using Mapster; +using Microsoft.Extensions.Caching.Distributed; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -15,6 +20,7 @@ { HttpRequestBuilder AddAuthentication(HttpRequestBuilder builder); Task<TResponse> SendAsAsync<TResponse>(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder); + Task<string> SendAsStringAsync(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder); } public class DefaultResourceHttpProvider : IResourceHttpProvider @@ -30,17 +36,90 @@ public async Task<TResponse> SendAsAsync<TResponse>(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder) { + return await httpRemoteService.SendAsAsync<TResponse>(builder); + } + + public async Task<string> SendAsStringAsync(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder) + { + return await httpRemoteService.SendAsStringAsync(builder); + } + } + + public class TokenDataModel + { + /// <summary> + /// 鐢ㄦ埛璁块棶浠ょ墝 + /// </summary> + public string AccessToken { get; set; } + + /// <summary> + /// 鍒锋柊浠ょ墝 + /// </summary> + public string RefreshToken { get; set; } + } + + public class SystemUserResourceHttpProvider : IResourceHttpProvider + { + public HttpRequestBuilder AddAuthentication(HttpRequestBuilder builder) + { + var token = GetToken(); + return builder + .WithHeader("Authorization", "Bearer " + token.AccessToken) + .WithHeader("X-Authorization", "Bearer " + token.RefreshToken); + } + + public async Task<TResponse> SendAsAsync<TResponse>(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder) + { var response = await httpRemoteService.SendAsAsync<TResponse>(builder); - dynamic clay = Clay.Parse(response); - if (clay.Code == 401) + return response; + } + + public async Task<string> SendAsStringAsync(IHttpRemoteService httpRemoteService, HttpRequestBuilder builder) + { + var response = await httpRemoteService.SendAsStringAsync(builder); + try { - Console.WriteLine(); - throw new Exception(); + var result = response.JsonTo(new + { + Code = 0 + }); + if (result.Code == 401) + { + var token = GetToken(true); + builder = builder + .WithHeader("Authorization", "Bearer " + token.AccessToken) + .WithHeader("X-Authorization", "Bearer " + token.RefreshToken); + response = await httpRemoteService.SendAsStringAsync(builder); + } } - else + catch { } + return response; + } + + private TokenDataModel GetToken(bool recache = false) + { + var distributedCache = App.GetRequiredService<IDistributedCache>(); + var token = distributedCache.GetString("SystemUserToken"); + if (token == null || recache) { - return response; + var logier = new CurrentLogier + { + Id = new Guid("11111111-1111-1111-1111-111111111111"), + Name = "绠$悊鍛�", + UserName = "system", + Type = EnumUserType.Operation, + ClientType = EnumClientType.PcWeb, + Level = 999, + }; + JwtUtils.GenerateToken(logier); + token = logier.Adapt<TokenDataModel>().ToJson(); + distributedCache.SetString("SystemUserToken", token, new DistributedCacheEntryOptions + { + AbsoluteExpiration = DateTime.Now.AddMinutes(60 * 23) + }); } + var tokenData = token.JsonTo<TokenDataModel>(); + return tokenData; } } } -- Gitblit v1.9.1