Browse Source

框架配置swagger显示注释,添加忽略接口

master
liujiaqiang 2 years ago
parent
commit
bfe4ab19f5
  1. 3
      24Hour/24Hour.csproj
  2. 2
      24Hour/Controllers/LoginController.cs
  3. 33
      24Hour/Program.cs
  4. 1
      Elight.Utility/Elight.Utility.csproj
  5. 41
      Elight.Utility/HiddenApiFilter.cs

3
24Hour/24Hour.csproj

@ -5,10 +5,11 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>_24Hour</RootNamespace> <RootNamespace>_24Hour</RootNamespace>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>E:\Code\24Hour.Service\24Hour\24Hour.xml</DocumentationFile> <DocumentationFile>E:\Code\24Hour.Service\24Hour\bin\Debug\net6.0\24Hour.xml</DocumentationFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

2
24Hour/Controllers/LoginController.cs

@ -1,4 +1,5 @@
using Elight.Entity; using Elight.Entity;
using Elight.Utility;
using Elight.Utility.Code; using Elight.Utility.Code;
using Elight.Utility.Encrypt; using Elight.Utility.Encrypt;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -16,6 +17,7 @@ namespace _24Hour.Controllers
/// <summary> /// <summary>
/// 怬 /// 怬
/// </summary> /// </summary>
[HiddenApi]
[ApiController] [ApiController]
[Route("api/APP")] [Route("api/APP")]
public class LoginController : ControllerBase public class LoginController : ControllerBase

33
24Hour/Program.cs

@ -22,27 +22,18 @@ var Configuration = builder.Configuration;
builder.Services.AddControllers(); builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
#region
#endregion
builder.Services.AddSwaggerGen(c => builder.Services.AddSwaggerGen(c =>
{ {
c.SwaggerDoc("v1", new OpenApiInfo { Title = "24СʱһÌå»ú API", Version = "v1" }); c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
c.CustomOperationIds(apiDesc => //在接口类、方法标记属性 [HiddenApi],可以阻止【Swagger文档】生成
{ c.DocumentFilter<HiddenApiFilter>();
var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor; c.OrderActionsBy(o => o.RelativePath);
return controllerAction?.ControllerName + "-" + controllerAction?.ActionName; var basePath = System.AppDomain.CurrentDomain.BaseDirectory;//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径)
}); var xmlPath = Path.Combine(basePath, "24Hour.xml");
if (File.Exists(xmlPath))//避免没有该文件时报错
c.ResolveConflictingActions(apiDescription => apiDescription.First()); c.IncludeXmlComments(xmlPath, true);
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);
}
}
//添加Jwt验证设置 //添加Jwt验证设置
c.AddSecurityRequirement(new OpenApiSecurityRequirement() c.AddSecurityRequirement(new OpenApiSecurityRequirement()
{ {
@ -67,6 +58,10 @@ builder.Services.AddSwaggerGen(c =>
Type = SecuritySchemeType.ApiKey Type = SecuritySchemeType.ApiKey
}); });
}); });
builder.Services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
// 添加身份验证服务 // 添加身份验证服务
builder.Services.AddAuthentication(options => builder.Services.AddAuthentication(options =>
{ {

1
Elight.Utility/Elight.Utility.csproj

@ -12,6 +12,7 @@
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="7.0.5" /> <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="7.0.5" />
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="7.0.5" /> <PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="7.0.5" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.2.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

41
Elight.Utility/HiddenApiFilter.cs

@ -0,0 +1,41 @@
using 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);
}
}
}
}
}
}
Loading…
Cancel
Save