diff --git a/framework/Furion.Pure/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs b/framework/Furion.Pure/SpecificationDocument/Builders/SpecificationDocumentBuilder.cs index 4fcc865588a1d89aa71998522dd7b79f09c5ca61..5c588898c144ff151f60376f43b20738eec6236b 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 5f2a9269bbb0e31ad8ae36cfa026d37893491537..27c74476d0ecd534e5532e4e1e434f6da023acd4 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 c1a6dccba9b18a7cae898e3a07e1f7aee32b4cd3..861384ec2b2b405135f29333122d6e92530af1c0 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 4fcc865588a1d89aa71998522dd7b79f09c5ca61..b3af1597829a77c66a585b4b99193a6278a21132 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 5f2a9269bbb0e31ad8ae36cfa026d37893491537..cf56f9cef8187189883cb58b5dcca357072a9ba2 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 c1a6dccba9b18a7cae898e3a07e1f7aee32b4cd3..861384ec2b2b405135f29333122d6e92530af1c0 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 62512ad7f1d828977b7e5b80cdc186a3c8f66a1c..402736e6e2c5bc4a6fccfe6bdeeca6055ac65acf 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 a5094a528b40f35f02e567d6043d29d7c529bc90..bbc11bf3c6178daa115cb9c9ea93d1e409b34daf 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",