FlexJobApi.Core/FlexJobApiCoreStartup.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Utils/SwaggerUtils/EnumSchemaFilter.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/Utils/XmlDocUtils/XmlDocUtils.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.Core/settings.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
FlexJobApi.User.Application/Menus/Queries/MenuAllQueryHandler.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
FlexJobApi.Core/FlexJobApiCoreStartup.cs
@@ -55,7 +55,8 @@ services.AddSpecificationDocuments(options => { options.OperationFilter<FurionCustomOperationIdFilter>(); options.OperationFilter<CustomOperationIdFilter>(); options.SchemaFilter<EnumSchemaFilter>(); }); services.AddControllers() FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs
File was renamed from FlexJobApi.Core/Utils/SwaggerUtils/FurionCustomOperationIdFilter.cs @@ -9,7 +9,7 @@ namespace FlexJobApi.Core { public class FurionCustomOperationIdFilter : IOperationFilter public class CustomOperationIdFilter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { FlexJobApi.Core/Utils/SwaggerUtils/EnumSchemaFilter.cs
New file @@ -0,0 +1,40 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { public class EnumSchemaFilter : ISchemaFilter { public void Apply(OpenApiSchema schema, SchemaFilterContext context) { if (context.Type.IsEnum) { // 枚举类型的描述(来自枚举本身的注释) schema.Description ??= GetEnumDescription(context.Type); } } // 获取枚举类型的注释 private string GetEnumDescription(Type enumType) { var xmlDoc = XmlDocUtils.GetXmlDocAsync().Result; var member = XmlDocUtils.GetXmlDocMemberAsync(enumType, xmlDoc).Result; var description = member?.Summary ?? ""; foreach (var enumValue in Enum.GetValues(enumType)) { var enumMember = enumType.GetMember(enumValue.ToString()).First(); var enumXmlDocMember = XmlDocUtils.GetXmlDocMemberAsync(enumMember, xmlDoc).Result; description += $"{enumValue}-{enumXmlDocMember?.Summary} "; } return description; } } } FlexJobApi.Core/Utils/XmlDocUtils/XmlDocUtils.cs
@@ -24,6 +24,8 @@ { private const string cacheKey = "XmlDoc"; public static XmlDoc XmlDoc { get; set; } /// <summary> /// 生成注释文档 /// </summary> @@ -75,6 +77,8 @@ } } XmlDoc = xmlDoc; if (xmlDoc.Members.Any()) { var json = JsonConvert.SerializeObject(xmlDoc); @@ -90,17 +94,19 @@ /// <returns></returns> public static async Task<XmlDoc> GetXmlDocAsync() { XmlDoc xmlDoc = null; var json = await App.GetService<IDistributedCache>().GetStringAsync(cacheKey); if (!string.IsNullOrEmpty(json)) if (XmlDoc == null) { xmlDoc = JsonConvert.DeserializeObject<XmlDoc>(json); var json = await App.GetService<IDistributedCache>().GetStringAsync(cacheKey); if (!string.IsNullOrEmpty(json)) { XmlDoc = JsonConvert.DeserializeObject<XmlDoc>(json); } if (XmlDoc == null) { XmlDoc = await BuildXmlDocAsync(); } } if (xmlDoc == null) { xmlDoc = await BuildXmlDocAsync(); } return xmlDoc; return XmlDoc; } /// <summary> @@ -113,15 +119,7 @@ { if (xmlDoc == null) { var json = await App.GetService<IDistributedCache>().GetStringAsync(cacheKey); if (!string.IsNullOrEmpty(json)) { xmlDoc = JsonConvert.DeserializeObject<XmlDoc>(json); } } if (xmlDoc == null) { xmlDoc = await BuildXmlDocAsync(); xmlDoc = await GetXmlDocAsync(); } if (xmlDoc != null && memberInfo != null) { FlexJobApi.Core/settings.json
@@ -11,8 +11,7 @@ "Name": "孙鹏飞" } } ], "EnumToNumber": true ] }, "CorsAccessorSettings": { "WithExposedHeaders": [ FlexJobApi.User.Application/Menus/Queries/MenuAllQueryHandler.cs
@@ -26,6 +26,8 @@ public async Task<MenuAllCallback> Handle(MenuAllQuery request, CancellationToken cancellationToken) { var config = new TypeAdapterConfig(); config.Default.MaxDepth(10); var callback = new MenuAllCallback(); callback.Items = await menuRep.AsQueryable() .Include(it => it.Childrens.Where(c => @@ -37,7 +39,7 @@ it.Type == EnumMenuType.Menu || it.Type == EnumMenuType.Page || it.Type == EnumMenuType.Modal) .ProjectToType<MenuAllCallbackItem>() .ProjectToType<MenuAllCallbackItem>(config) .ToListAsync(cancellationToken); return callback; }