From e066d51c2b9ea4cae97224686e97a84d039ef1de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=80=9D=E5=87=AF?= Date: Wed, 12 Feb 2025 12:20:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E2=80=9C=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=BC=BA=E5=88=B6=E8=A7=84=E8=8C=83=E5=8C=96=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E2=80=9D=E9=85=8D=E7=BD=AE=EF=BC=8C=E9=BB=98=E8=AE=A4false?= =?UTF-8?q?=EF=BC=8C=E5=BD=93=E4=B8=BAtrue=E6=97=B6=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E5=8F=97NonUnify=E3=80=81UnifyResult=E3=80=81ProducesResponseT?= =?UTF-8?q?ype=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Builders/SpecificationDocumentBuilder.cs | 5 ++++- .../Options/SpecificationDocumentSettingsOptions.cs | 5 +++++ framework/Furion.Pure/UnifyResult/UnifyContext.cs | 9 +++++++++ .../Builders/SpecificationDocumentBuilder.cs | 4 ++++ .../Options/SpecificationDocumentSettingsOptions.cs | 5 +++++ framework/Furion/UnifyResult/UnifyContext.cs | 9 +++++++++ samples/Furion.Application/TestUnifyProvider.cs | 7 ++++++- samples/Furion.Application/applicationsettings.json | 1 + 8 files changed, 43 insertions(+), 2 deletions(-) diff --git a/framework/Furion.Pure/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs b/framework/Furion.Pure/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs index 4fcc865588..5c588898c1 100644 --- a/framework/Furion.Pure/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs +++ b/framework/Furion.Pure/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs @@ -82,7 +82,10 @@ public static class SpecificationDocumentBuilder /// 文档分组列表 /// public static readonly IEnumerable DocumentGroups; - + /// + /// 是否强制启用规范化结果 + /// + public static bool ForceUnifyResult => _specificationDocumentSettings.ForceUnifyResult; /// /// 构造函数 /// diff --git a/framework/Furion.Pure/SpecificationDocument/Options/SpecificationDocumentSettingsOptions.cs b/framework/Furion.Pure/SpecificationDocument/Options/SpecificationDocumentSettingsOptions.cs index 5f2a9269bb..27c74476d0 100644 --- a/framework/Furion.Pure/SpecificationDocument/Options/SpecificationDocumentSettingsOptions.cs +++ b/framework/Furion.Pure/SpecificationDocument/Options/SpecificationDocumentSettingsOptions.cs @@ -136,6 +136,11 @@ public sealed class SpecificationDocumentSettingsOptions : IConfigurableOptions< /// public bool? EnumToNumber { get; set; } + /// + /// 是否强制规范化结果,默认 false + /// + public bool ForceUnifyResult { get; set; } = false; + /// /// 后期配置 /// diff --git a/framework/Furion.Pure/UnifyResult/UnifyContext.cs b/framework/Furion.Pure/UnifyResult/UnifyContext.cs index c1a6dccba9..861384ec2b 100644 --- a/framework/Furion.Pure/UnifyResult/UnifyContext.cs +++ b/framework/Furion.Pure/UnifyResult/UnifyContext.cs @@ -26,6 +26,7 @@ using Furion.Extensions; using Furion.FriendlyException; using Furion.Localization; +using Furion.SpecificationDocument; using Furion.Templates.Extensions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; @@ -281,6 +282,10 @@ public static class UnifyContext || method.ReflectedType.IsDefined(typeof(NonUnifyAttribute), true) || method.DeclaringType.Assembly.GetName().Name.StartsWith("Microsoft.AspNetCore.OData"); + if (SpecificationDocumentBuilder.ForceUnifyResult) + { + isSkip = false; + } if (!isWebRequest) { unifyResult = null; @@ -311,6 +316,10 @@ public static class UnifyContext ) || method.DeclaringType.Assembly.GetName().Name.StartsWith("Microsoft.AspNetCore.OData"); + if (SpecificationDocumentBuilder.ForceUnifyResult) + { + isSkip = false; + } unifyResult = isSkip ? null : App.RootServices.GetService(unityMetadata.ProviderType) as IUnifyResultProvider; return unifyResult == null || isSkip; } diff --git a/framework/Furion/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs b/framework/Furion/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs index 4fcc865588..b3af159782 100644 --- a/framework/Furion/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs +++ b/framework/Furion/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs @@ -883,6 +883,10 @@ public static class SpecificationDocumentBuilder return true; } + /// + /// 是否强制启用规范化结果 + /// + public static bool ForceUnifyResult => _specificationDocumentSettings.ForceUnifyResult; /// /// 解析分组附加信息 /// diff --git a/framework/Furion/SpecificationDocument/Options/SpecificationDocumentSettingsOptions.cs b/framework/Furion/SpecificationDocument/Options/SpecificationDocumentSettingsOptions.cs index 5f2a9269bb..cf56f9cef8 100644 --- a/framework/Furion/SpecificationDocument/Options/SpecificationDocumentSettingsOptions.cs +++ b/framework/Furion/SpecificationDocument/Options/SpecificationDocumentSettingsOptions.cs @@ -130,6 +130,11 @@ public sealed class SpecificationDocumentSettingsOptions : IConfigurableOptions< /// 启用 All Groups 功能 /// public bool? EnableAllGroups { get; set; } + + /// + /// 强制启用规范化结果(不受NonUnify、UnifyResult、ProducesResponseType影响) + /// + public bool ForceUnifyResult { get; set; } = false; /// /// 枚举类型生成值类型 diff --git a/framework/Furion/UnifyResult/UnifyContext.cs b/framework/Furion/UnifyResult/UnifyContext.cs index c1a6dccba9..861384ec2b 100644 --- a/framework/Furion/UnifyResult/UnifyContext.cs +++ b/framework/Furion/UnifyResult/UnifyContext.cs @@ -26,6 +26,7 @@ using Furion.Extensions; using Furion.FriendlyException; using Furion.Localization; +using Furion.SpecificationDocument; using Furion.Templates.Extensions; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; @@ -281,6 +282,10 @@ public static class UnifyContext || method.ReflectedType.IsDefined(typeof(NonUnifyAttribute), true) || method.DeclaringType.Assembly.GetName().Name.StartsWith("Microsoft.AspNetCore.OData"); + if (SpecificationDocumentBuilder.ForceUnifyResult) + { + isSkip = false; + } if (!isWebRequest) { unifyResult = null; @@ -311,6 +316,10 @@ public static class UnifyContext ) || method.DeclaringType.Assembly.GetName().Name.StartsWith("Microsoft.AspNetCore.OData"); + if (SpecificationDocumentBuilder.ForceUnifyResult) + { + isSkip = false; + } unifyResult = isSkip ? null : App.RootServices.GetService(unityMetadata.ProviderType) as IUnifyResultProvider; return unifyResult == null || isSkip; } diff --git a/samples/Furion.Application/TestUnifyProvider.cs b/samples/Furion.Application/TestUnifyProvider.cs index 62512ad7f1..402736e6e2 100644 --- a/samples/Furion.Application/TestUnifyProvider.cs +++ b/samples/Furion.Application/TestUnifyProvider.cs @@ -9,13 +9,18 @@ public class TestUnifyProvider : IDynamicApiController { return "test"; } + [UnifyProvider] public string DefaultUnify2() { return "test"; } - + [ProducesResponseType(typeof(MyResult), 200)] + public string DefaultUnify3() + { + return "test3"; + } [UnifyProvider("specially")] public string SpeciallyUnify() { diff --git a/samples/Furion.Application/applicationsettings.json b/samples/Furion.Application/applicationsettings.json index a5094a528b..bbc11bf3c6 100644 --- a/samples/Furion.Application/applicationsettings.json +++ b/samples/Furion.Application/applicationsettings.json @@ -3,6 +3,7 @@ "SpecificationDocumentSettings": { "DocumentTitle": "Furion | 数据库操作演示", + "ForceUnifyResult": false, "GroupOpenApiInfos": [ { "Group": "Default", -- Gitee