.net6 swagger 修改路由名称的过滤器 去除掉后缀的Service

cs 复制代码
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.IO;
using static System.Net.WebRequestMethods;


public class RemoveServiceSuffixOperationFilter : IOperationFilter
{
    /// <summary>
    /// 修改路由名称的过滤器 去除掉后缀的Service
    /// </summary>
    /// <param name="operation"></param>
    /// <param name="context"></param>
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (operation.Tags.Count > 0)
        {
            foreach (var tag in operation.Tags)
            {
                tag.Name = tag.Name.Replace("Service", "");
            }
        }
    }
}

/// <summary>
/// OpenApi过滤器
/// </summary>
public class TagReorderDocumentFilter : IDocumentFilter
{
    /// <summary>
    /// 修改路由名称的过滤器 去除掉后缀的Service
    /// </summary>
    /// <param name="operation"></param>
    /// <param name="context"></param>
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        //修改模块名称
        foreach (var tag in swaggerDoc.Tags)
        {
            tag.Name = tag.Name.Replace("Service", "");
        }

        //修改路由中的模块
        foreach (var path in swaggerDoc.Paths)
        {
            foreach (var o in path.Value.Operations)
            {
                foreach (var tag in o.Value.Tags)
                {
                    tag.Name = tag.Name.Replace("Service", "");
                }
            }
        }

        //swaggerDoc.Tags.Clear(); //清空Tags
        防止重复
        //Dictionary<string, OpenApiTag> dic = new Dictionary<string, OpenApiTag>();
        重新添加Tags
        //foreach (var path in swaggerDoc.Paths)
        //{
        //    foreach (var o in path.Value.Operations)
        //    {
        //        foreach (var tag in o.Value.Tags)
        //        {
        //            if (!dic.Keys.Contains(tag.Name))
        //            {
        //                dic.Add(tag.Name, tag);
        //                swaggerDoc.Tags.Add(tag);
        //            }
        //        }
        //    }
        //}
    }
}

在program.cs中注册

cs 复制代码
//添加Swagger的Authiozer的按钮鉴权
builder.Services.AddSwaggerGen(s =>
{
    s.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });

    string netXmlString = AppContext.BaseDirectory + "/WebApiBasics.Net.xml";
    s.IncludeXmlComments(netXmlString, true);

    string entityXmlStringa = AppDomain.CurrentDomain.BaseDirectory + "/WebApiBasics.Entity.xml";
    s.IncludeXmlComments(entityXmlStringa, true);

    string coreXmlStringa = AppDomain.CurrentDomain.BaseDirectory + "/WebApiBasics.Core.xml";
    s.IncludeXmlComments(coreXmlStringa, true);

    // 添加修改路由名称的过滤器 去除掉后缀的Service
    s.OperationFilter<RemoveServiceSuffixOperationFilter>();
    s.DocumentFilter<TagReorderDocumentFilter>();

    s.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
    {
        Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer Token",
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.ApiKey,
        BearerFormat = "JWT",
        Scheme = "Bearer"
    });

    s.AddSecurityRequirement(new OpenApiSecurityRequirement
                    {
                        {
                            new OpenApiSecurityScheme{
                                Reference = new OpenApiReference {
                                            Type = ReferenceType.SecurityScheme,
                                            Id = "Bearer"}
                           },new string[] { }
                        }
                    });

});

效果

相关推荐
刚子编程2 小时前
用 Inno Setup 把 .NET 程序打包成安装包:从零到发布的完整指南
.net·inno setup·码农刚子·.net 程序打包·安装脚本编写
曹牧4 小时前
C#:字符串做20位截断
开发语言·c#
界面开发小八哥5 小时前
界面控件DevExpress Blazor v26.1新版亮点 - TreeList & 数据编辑器
javascript·编辑器·.net·界面控件·blazor·devexpress·用户界面
离陌在学C#14 小时前
C# 事件(Event)详解:从概念到实战
开发语言·c#
rockey62715 小时前
C#脚本引擎之AScript与Flee对比
c#·.net·script·eval·动态脚本
zjnlswd21 小时前
C#学习笔记4
笔记·学习·c#
曹牧1 天前
C#:List<string>特定格式输出
windows·c#
Z5998178411 天前
c#软件开发学习笔记--Modbus-TCP/UDP网口通讯
笔记·学习·c#
曹牧1 天前
C#:取的多个药品批准文号中的一个
c#
海盗12341 天前
微软技术周报 · 2026-08-11~2026-08-18
人工智能·microsoft·.net