From bfe4ab19f57e3570e281206a0242254ae6e866e0 Mon Sep 17 00:00:00 2001 From: liujiaqiang <1448951783@qq.com> Date: Tue, 13 Jun 2023 18:59:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=86=E6=9E=B6=E9=85=8D=E7=BD=AEswagger?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=B3=A8=E9=87=8A=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 24Hour/24Hour.csproj | 3 +- 24Hour/Controllers/LoginController.cs | 2 ++ 24Hour/Program.cs | 33 +++++++++------------ Elight.Utility/Elight.Utility.csproj | 1 + Elight.Utility/HiddenApiFilter.cs | 41 +++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 Elight.Utility/HiddenApiFilter.cs diff --git a/24Hour/24Hour.csproj b/24Hour/24Hour.csproj index a8d24c6..b5c1b97 100644 --- a/24Hour/24Hour.csproj +++ b/24Hour/24Hour.csproj @@ -5,10 +5,11 @@ enable enable _24Hour + True - E:\Code\24Hour.Service\24Hour\24Hour.xml + E:\Code\24Hour.Service\24Hour\bin\Debug\net6.0\24Hour.xml diff --git a/24Hour/Controllers/LoginController.cs b/24Hour/Controllers/LoginController.cs index ffc84a4..8f3de09 100644 --- a/24Hour/Controllers/LoginController.cs +++ b/24Hour/Controllers/LoginController.cs @@ -1,4 +1,5 @@ using Elight.Entity; +using Elight.Utility; using Elight.Utility.Code; using Elight.Utility.Encrypt; using Microsoft.AspNetCore.Mvc; @@ -16,6 +17,7 @@ namespace _24Hour.Controllers /// /// 登录 /// + [HiddenApi] [ApiController] [Route("api/APP")] public class LoginController : ControllerBase diff --git a/24Hour/Program.cs b/24Hour/Program.cs index 53b4e84..45217eb 100644 --- a/24Hour/Program.cs +++ b/24Hour/Program.cs @@ -22,27 +22,18 @@ var Configuration = builder.Configuration; builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); +#region +#endregion builder.Services.AddSwaggerGen(c => { - c.SwaggerDoc("v1", new OpenApiInfo { Title = "24小时一体机 API", Version = "v1" }); - c.CustomOperationIds(apiDesc => - { - var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor; - return controllerAction?.ControllerName + "-" + controllerAction?.ActionName; - }); - - c.ResolveConflictingActions(apiDescription => apiDescription.First()); - c.CustomSchemaIds(x => x.FullName); - c.DocInclusionPredicate((docName, description) => true); - - var xmlFiles = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, "xml"), "*.xml"); - if (xmlFiles.Length > 0) - { - foreach (var xmlFile in xmlFiles) - { - c.IncludeXmlComments(xmlFile, true); - } - } + c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); + //在接口类、方法标记属性 [HiddenApi],可以阻止【Swagger文档】生成 + c.DocumentFilter(); + c.OrderActionsBy(o => o.RelativePath); + var basePath = System.AppDomain.CurrentDomain.BaseDirectory;//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径) + var xmlPath = Path.Combine(basePath, "24Hour.xml"); + if (File.Exists(xmlPath))//避免没有该文件时报错 + c.IncludeXmlComments(xmlPath, true); //添加Jwt验证设置 c.AddSecurityRequirement(new OpenApiSecurityRequirement() { @@ -67,6 +58,10 @@ builder.Services.AddSwaggerGen(c => Type = SecuritySchemeType.ApiKey }); }); +builder.Services.AddControllers().AddJsonOptions(options => +{ + options.JsonSerializerOptions.PropertyNamingPolicy = null; +}); // 添加身份验证服务 builder.Services.AddAuthentication(options => { diff --git a/Elight.Utility/Elight.Utility.csproj b/Elight.Utility/Elight.Utility.csproj index b491c85..afd13e6 100644 --- a/Elight.Utility/Elight.Utility.csproj +++ b/Elight.Utility/Elight.Utility.csproj @@ -12,6 +12,7 @@ + diff --git a/Elight.Utility/HiddenApiFilter.cs b/Elight.Utility/HiddenApiFilter.cs new file mode 100644 index 0000000..58288b8 --- /dev/null +++ b/Elight.Utility/HiddenApiFilter.cs @@ -0,0 +1,41 @@ +锘縰sing Microsoft.AspNetCore.Mvc.ApiExplorer; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.SwaggerGen; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace Elight.Utility +{ + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] + public class HiddenApiAttribute : System.Attribute + { + } + + public class HiddenApiFilter : IDocumentFilter + { + public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) + { + foreach (ApiDescription apiDescription in context.ApiDescriptions) + { + if (apiDescription.TryGetMethodInfo(out MethodInfo method)) + { + if (method.ReflectedType.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute)) + || method.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute))) + { + string key = "/" + apiDescription.RelativePath; + if (key.Contains("?")) + { + int idx = key.IndexOf("?", System.StringComparison.Ordinal); + key = key.Substring(0, idx); + } + swaggerDoc.Paths.Remove(key); + } + } + } + } + } +}