From 8b05c01e423001bb858266e7ead172d0301fcf86 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 30 Jul 2024 15:12:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=BF=87=E9=85=8D=E7=BD=AEapi=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E8=87=AA=E5=8A=A8=E5=B0=86Result=20?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E5=8A=A0=E5=AF=86=E8=BF=94=E5=9B=9E=EF=BC=8C?= =?UTF-8?q?=E5=90=8C=E6=97=B6code=E8=BF=94=E5=9B=9E12=E6=A0=87=E6=B3=A8=20?= =?UTF-8?q?=E7=9B=AE=E5=89=8D=E4=BD=BF=E7=94=A8base64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Progranm.cs | 11 +-- IRaCIS.Core.API/appsettings.json | 7 ++ .../BusinessFilter/EncreptApiResultFilter.cs | 71 +++++++++++++++++++ .../BusinessFilter/UnifiedApiResultFilter.cs | 16 +---- IRaCIS.Core.Domain/_Config/_AppSettings.cs | 26 ++++--- .../_IRaCIS/Output/ApiResponseCodeEnum.cs | 4 +- .../_IRaCIS/Output/IResponseOutput.cs | 2 +- .../_IRaCIS/Output/ResponseOutput.cs | 2 +- 8 files changed, 109 insertions(+), 30 deletions(-) create mode 100644 IRaCIS.Core.Application/BusinessFilter/EncreptApiResultFilter.cs diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index 50cb855b4..40ffb2743 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -28,6 +28,7 @@ using FellowOakDicom.Network; using IRaCIS.Core.Application.Service.ImageAndDoc; using IP2Region.Net.Abstractions; using IP2Region.Net.XDB; +using IRaCIS.Core.Application.BusinessFilter; #region 获取环境变量 @@ -104,11 +105,9 @@ builder.Services.AddControllers(options => options.Filters.Add(); options.Filters.Add(); options.Filters.Add(); + options.Filters.Add(10); + options.Filters.Add(); - if (_configuration.GetSection("BasicSystemConfig").GetValue("OpenLoginLimit")) - { - options.Filters.Add(); - } }) .AddNewtonsoftJsonSetup(builder.Services); // NewtonsoftJson 序列化 处理 @@ -117,6 +116,8 @@ builder.Services.AddOptions().Configure(_configuration.Ge builder.Services.AddOptions().Configure(_configuration.GetSection("BasicSystemConfig")); builder.Services.AddOptions().Configure(_configuration.GetSection("AliyunOSS")); builder.Services.AddOptions().Configure(_configuration.GetSection("ObjectStoreService")); +builder.Services.AddOptions().Configure(_configuration.GetSection("EncrypteResponseConfig")); + //动态WebApi + UnifiedApiResultFilter 省掉控制器代码 @@ -297,7 +298,7 @@ try - var server = DicomServerFactory.Create(11112,userState: app.Services); + var server = DicomServerFactory.Create(11112, userState: app.Services); app.Run(); diff --git a/IRaCIS.Core.API/appsettings.json b/IRaCIS.Core.API/appsettings.json index b6d0f4125..59dd671c2 100644 --- a/IRaCIS.Core.API/appsettings.json +++ b/IRaCIS.Core.API/appsettings.json @@ -92,5 +92,12 @@ "DefaultPassword": "123456", "DefaultInternalOrganizationName": "ExtImaging", "ImageShareExpireDays": 10 + }, + + "EncrypteResponseConfig": { + "IsEnable": true, + "ApiPathList": [ + "/test/get" + ] } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/BusinessFilter/EncreptApiResultFilter.cs b/IRaCIS.Core.Application/BusinessFilter/EncreptApiResultFilter.cs new file mode 100644 index 000000000..fd58ae885 --- /dev/null +++ b/IRaCIS.Core.Application/BusinessFilter/EncreptApiResultFilter.cs @@ -0,0 +1,71 @@ +using IRaCIS.Core.Domain.Share; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IRaCIS.Core.Application.BusinessFilter +{ + public class EncreptApiResultFilter : IAsyncResultFilter + { + + private readonly IOptionsMonitor _encreptResponseMonitor; + + public EncreptApiResultFilter(IOptionsMonitor encreptResponseMonitor) + { + _encreptResponseMonitor = encreptResponseMonitor; + } + + public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) + { + + if(_encreptResponseMonitor.CurrentValue.IsEnable) + { + + if (context.Result is ObjectResult objectResult) + { + var statusCode = objectResult.StatusCode ?? context.HttpContext.Response.StatusCode; + + var objectValue = objectResult.Value; + + + if (objectValue is IResponseOutput) + { + var responseOutput = objectValue as IResponseOutput; + + var path = context.HttpContext?.Request.Path.Value?.ToLower(); + + + if(!string.IsNullOrEmpty(path) && path.Length>5 && _encreptResponseMonitor.CurrentValue.ApiPathList.Contains(path.ToLower())) + { + + if(responseOutput.IsSuccess) + { + responseOutput.Code = ApiResponseCodeEnum.ResultEncrepted; + responseOutput.Data = JsonConvert.SerializeObject(Convert.ToBase64String(Encoding.UTF8.GetBytes(responseOutput.Data.ToString()))); + + objectResult.Value = responseOutput; + } + + } + + } + + + + } + } + + + + + await next.Invoke(); + + } + } +} diff --git a/IRaCIS.Core.Application/BusinessFilter/UnifiedApiResultFilter.cs b/IRaCIS.Core.Application/BusinessFilter/UnifiedApiResultFilter.cs index a41c659b1..9e5fdf591 100644 --- a/IRaCIS.Core.Application/BusinessFilter/UnifiedApiResultFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/UnifiedApiResultFilter.cs @@ -8,8 +8,9 @@ namespace IRaCIS.Application.Services.BusinessFilter /// 统一返回前端数据包装,之前在控制器包装,现在修改为动态Api 在ResultFilter这里包装,减少重复冗余代码 /// by zhouhang 2021.09.12 周末 /// - public class UnifiedApiResultFilter : Attribute, IAsyncResultFilter - { + public class UnifiedApiResultFilter : Attribute, IAsyncResultFilter + { + /// /// 异步版本 /// @@ -26,15 +27,6 @@ namespace IRaCIS.Application.Services.BusinessFilter //是200 并且没有包装 那么包装结果 if (statusCode == 200 && !(objectResult.Value is IResponseOutput)) { - //if (objectResult.Value == null) - //{ - // var apiResponse = ResponseOutput.DBNotExist(); - - // objectResult.Value = apiResponse; - // objectResult.DeclaredType = apiResponse.GetType(); - //} - //else - //{ var type = objectResult.Value?.GetType(); @@ -64,8 +56,6 @@ namespace IRaCIS.Application.Services.BusinessFilter objectResult.DeclaredType = apiResponse.GetType(); } - - //} } //如果不是200 是IResponseOutput 不处理 diff --git a/IRaCIS.Core.Domain/_Config/_AppSettings.cs b/IRaCIS.Core.Domain/_Config/_AppSettings.cs index 80aed90e8..a4833050b 100644 --- a/IRaCIS.Core.Domain/_Config/_AppSettings.cs +++ b/IRaCIS.Core.Domain/_Config/_AppSettings.cs @@ -1,6 +1,7 @@ using IRaCIS.Core.Domain.Models; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; +using System.Collections.Generic; namespace IRaCIS.Core.Domain.Share { @@ -19,7 +20,7 @@ namespace IRaCIS.Core.Domain.Share public int LoginMaxFailCount { get; set; } - public int LoginFailLockMinutes { get; set; } + public int LoginFailLockMinutes { get; set; } public int AutoLoginOutMinutes { get; set; } @@ -39,9 +40,9 @@ namespace IRaCIS.Core.Domain.Share public class SystemEmailSendConfig { - public int Port { get; set; } + public int Port { get; set; } - public string Host { get; set; } + public string Host { get; set; } public string FromEmail { get; set; } @@ -66,6 +67,13 @@ namespace IRaCIS.Core.Domain.Share } + public class EncreptResponseOption + { + public bool IsEnable { get; set; } + + public List ApiPathList { get; set; } + } + /// /// 项目基础配置规则 @@ -89,7 +97,7 @@ namespace IRaCIS.Core.Domain.Share public static string SystemSiteCodePrefix { get; set; } - public static string BlindTaskPrefix { get; set; } + public static string BlindTaskPrefix { get; set; } /// /// 用户默认密码 @@ -104,7 +112,7 @@ namespace IRaCIS.Core.Domain.Share { Path = "appsettings.json", ReloadOnChange = true - }) + }) .Build(); DoctorCodePrefix = configuration.GetSection("IRaCISBasicConfig").GetValue("DoctorCodePrefix"); @@ -112,7 +120,7 @@ namespace IRaCIS.Core.Domain.Share QCChallengeCodePrefix = configuration.GetSection("IRaCISBasicConfig").GetValue("QCChallengeCodePrefix"); NoneDicomStudyCodePrefix = configuration.GetSection("IRaCISBasicConfig").GetValue("NoneDicomStudyCodePrefix"); DicomStudyCodePrefix = configuration.GetSection("IRaCISBasicConfig").GetValue("DicomStudyCodePrefix"); - DefaultPassword= configuration.GetSection("IRaCISBasicConfig").GetValue("DefaultPassword"); + DefaultPassword = configuration.GetSection("IRaCISBasicConfig").GetValue("DefaultPassword"); SystemSiteCodePrefix = configuration.GetSection("IRaCISBasicConfig").GetValue("SystemSiteCodePrefix"); DefaultInternalOrganizationName = configuration.GetSection("IRaCISBasicConfig").GetValue("DefaultInternalOrganizationName"); @@ -125,7 +133,7 @@ namespace IRaCIS.Core.Domain.Share //获取实体编码字符串 - public static string GetCodeStr(int codeInt ,string typeStr) + public static string GetCodeStr(int codeInt, string typeStr) { switch (typeStr) { @@ -139,7 +147,7 @@ namespace IRaCIS.Core.Domain.Share case nameof(QCChallenge): - return QCChallengeCodePrefix+ codeInt.ToString("D5"); + return QCChallengeCodePrefix + codeInt.ToString("D5"); case nameof(NoneDicomStudy): @@ -164,5 +172,5 @@ namespace IRaCIS.Core.Domain.Share } - + } \ No newline at end of file diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs index 459ea65fb..a2d88b1c8 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ApiResponseCodeEnum.cs @@ -54,7 +54,9 @@ namespace IRaCIS.Core.Infrastructure.Extention NoToken = 10, //带了Token,但是没有相应权限(该用户类型不能做) - HaveTokenNotAccess = 11 + HaveTokenNotAccess = 11, + + ResultEncrepted=12 } diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/IResponseOutput.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/IResponseOutput.cs index 9c713a8a0..13b15698a 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/IResponseOutput.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/IResponseOutput.cs @@ -27,7 +27,7 @@ /// /// 返回数据 /// - T Data { get; } + T Data { get; set; } } //public interface IResponseOutput : IResponseOutput diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ResponseOutput.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ResponseOutput.cs index af255eeb2..74325db91 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ResponseOutput.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/Output/ResponseOutput.cs @@ -25,7 +25,7 @@ namespace IRaCIS.Core.Infrastructure.Extention /// 数据 兼顾以前 Json序列化的时候返回属性名为“Result” /// [JsonProperty("Result")] - public T Data { get; private set; } + public T Data { get; set; } [JsonProperty("OtherInfo")]