.net 7 隐藏swagger的api

1.写一个隐藏接口特性表示

using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;

using System.Web.Http.Description;

namespace JiaTongInterface.Filter
{
    public class SwaggerApi : Swashbuckle.AspNetCore.SwaggerGen.IDocumentFilter
    {
        /// <summary>
        /// 隐藏swagger接口特性标识
        /// </summary>
        [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
        public class HideApiAttribute : System.Attribute
        {
        }


        public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
        {
            foreach (Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription description in context.ApiDescriptions)
            {
                if (description.TryGetMethodInfo(out MethodInfo method))
                {
                    if (method.ReflectedType.CustomAttributes.Any(t => t.AttributeType == typeof(HideApiAttribute))
                            || method.CustomAttributes.Any(t => t.AttributeType == typeof(HideApiAttribute)))
                    {
                        string key = "/" + description.RelativePath;
                        if (key.Contains("?"))
                        {
                            int idx = key.IndexOf("?", System.StringComparison.Ordinal);
                            key = key.Substring(0, idx);
                        }
                        swaggerDoc.Paths.Remove(key);
                    }
                }
            }
        }
    }

}

2.在porgram.cs中加入option.DocumentFilter<SwaggerApi>();

builder.Services.AddSwaggerGen(option =>
{
    var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    option.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename), true);
    option.DocumentFilter<SwaggerApi>();
});

3.使用方法,在controlller前加入[SwaggerApi.HideApi]即可实现隐藏

4.效果 这里就看不到接口了

相关推荐
小乖兽技术23 分钟前
快速了解开源日志框架log4net:灵活记录应用程序日志信息的利器
开源·.net·log4net
梦起丶2 小时前
Qml 中实现水印工具
qt·ui·qml·水印
山海青风6 小时前
Axure入门教程 -- 第二章:创建第一个Axure项目
ui·axure
枫叶丹47 小时前
【HarmonyOS之旅】ArkTS语法(二)->动态构建UI元素
ui·华为od·华为·华为云·harmonyos
dot.Net安全矩阵14 小时前
.NET | 剖析通过 TcpClient 实现内网端口转发
服务器·网络·tcp/ip·安全·.net
卖个几把萌21 小时前
【10】Selenium+Python UI自动化测试 邮件发送测试报告(某积载系统实例-04)
python·selenium·ui
界面开发小八哥1 天前
报表工具DevExpress Reporting v24.2亮点 - AI功能进一步强化
人工智能·.net·报表·界面控件·devexpress·ui开发
梦起丶1 天前
Qt 中实现系统主题感知
qt·ui·工具·qml
数据的世界011 天前
.NET能做什么?全面解析.NET的应用领域
.net