1
0
Преглед на файлове

新增 分组特性ApiGroupAttribute,支持接口多分组和无分组设置
新增 动态api特性DynamicApiAttribute新增接口多分组设置

zhontai преди 2 години
родител
ревизия
acc943797f

+ 1 - 1
build/pkg.props

@@ -1,6 +1,6 @@
 <Project>
   <PropertyGroup>
-    <Version>2.3.2</Version>
+    <Version>2.3.3</Version>
 	<TargetFramework>net6.0</TargetFramework>
 	<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
 	<GenerateDocumentationFile>true</GenerateDocumentationFile>

+ 1 - 1
src/hosts/ZhonTai.Host/Configs/appconfig.json

@@ -30,7 +30,7 @@
       {
         "name": "中台Admin",
         "code": "admin",
-        "version": "v2.3.2",
+        "version": "v2.3.3",
         "description": ""
       }
     ]

+ 22 - 0
src/platform/ZhonTai.Admin/Core/Attributes/ApiGroupAttribute.cs

@@ -0,0 +1,22 @@
+using System;
+
+namespace ZhonTai.Admin.Core.Attributes;
+
+/// <summary>
+/// 接口分组
+/// </summary>
+[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)]
+public class ApiGroupAttribute : Attribute
+{
+    public bool NonGroup { get; set; }
+
+    /// <summary>
+    /// 分组名称列表
+    /// </summary>
+    public string[] GroupNames { get; set; }
+
+    public ApiGroupAttribute(params string[] groupNames)
+    {
+        GroupNames = groupNames;
+    }
+}

+ 30 - 1
src/platform/ZhonTai.Admin/Core/HostApp.cs

@@ -50,6 +50,7 @@ using FreeSql;
 using ZhonTai.Admin.Services.User;
 using ZhonTai.Admin.Core.Middlewares;
 using ZhonTai.Admin.Core.Dto;
+using ZhonTai.DynamicApi.Attributes;
 
 namespace ZhonTai.Admin.Core;
 
@@ -313,7 +314,35 @@ public class HostApp
 
                 options.ResolveConflictingActions(apiDescription => apiDescription.First());
                 //options.CustomSchemaIds(x => x.FullName);
-                //options.DocInclusionPredicate((docName, description) => true);
+
+                //支持多分组
+                options.DocInclusionPredicate((docName, apiDescription) =>
+                {
+                    var nonGroup = false;
+                    var groupNames = new List<string>();
+                    var dynamicApiAttribute = apiDescription.ActionDescriptor.EndpointMetadata.FirstOrDefault(x => x is DynamicApiAttribute);
+                    if (dynamicApiAttribute != null)
+                    {
+                        var dynamicApi = dynamicApiAttribute as DynamicApiAttribute;
+                        if(dynamicApi.GroupNames?.Length > 0)
+                        {
+                            groupNames.AddRange(dynamicApi.GroupNames);
+                        }
+                    }
+
+                    var apiGroupAttribute = apiDescription.ActionDescriptor.EndpointMetadata.FirstOrDefault(x => x is ApiGroupAttribute);
+                    if (apiGroupAttribute != null)
+                    {
+                        var apiGroup = apiGroupAttribute as ApiGroupAttribute;
+                        if (apiGroup.GroupNames?.Length > 0)
+                        {
+                            groupNames.AddRange(apiGroup.GroupNames);
+                        }
+                        nonGroup = apiGroup.NonGroup;
+                    }
+
+                    return docName == apiDescription.GroupName || groupNames.Any(a => a == docName) || nonGroup;
+                });
 
                 string[] xmlFiles = Directory.GetFiles(AppContext.BaseDirectory, "*.xml");
                 if (xmlFiles.Length > 0)

+ 10 - 0
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -9,6 +9,16 @@
             启用权限库事务
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Core.Attributes.ApiGroupAttribute">
+            <summary>
+            接口分组
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Core.Attributes.ApiGroupAttribute.GroupNames">
+            <summary>
+            分组名称列表
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Core.Attributes.LoginAttribute">
             <summary>
             启用登录

+ 5 - 0
src/platform/ZhonTai.DynamicApi/Attributes/DynamicApiAttribute.cs

@@ -13,6 +13,11 @@ public class DynamicApiAttribute : Attribute
     /// </summary>
     public string Area { get; set; }
 
+    /// <summary>
+    /// 分组名称列表
+    /// </summary>
+    public string[] GroupNames { get; set; }
+
     internal static bool IsExplicitlyEnabledFor(Type type)
     {
         var remoteServiceAttr = type.GetTypeInfo().GetSingleAttributeOrNull<DynamicApiAttribute>();