.NET 拓展Swagger之【版本控制】

上一节

.NET 拓展Swagger之【添加注释】 - 掘金 (juejin.cn)

创建版本枚举

arduino 复制代码
namespace ZhaoXi.WebSiteApi.Utility.SwaggerExt
{
    public enum ApiVersion
    {
        V1,
        V2
    }
}

服务注册

erlang 复制代码
typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
    {
        option.SwaggerDoc(version, new OpenApiInfo()
        {
            Title = $"标题",
            Version = version,
            Description = $"版本号为{version}"
        });
    });
csharp 复制代码
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    // app.UseSwaggerUI();

    app.UseSwaggerUI(c =>
    {
        foreach (string version in typeof(ApiVersion).GetEnumNames())
        {
            c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"第【{version}】版本");
        }
    });
}

测试

为方法绑定版本

在类上添加:[ApiExplorerSettings(IgnoreApi = false,GroupName = nameof(Utility.SwaggerExt.ApiVersion.V1))]

测试

方法封装

将原先的方法抽出,封装到CustomSwaggerExt类中

csharp 复制代码
using Microsoft.OpenApi.Models;
using System.Runtime.CompilerServices;
using System.Security.Cryptography.X509Certificates;

namespace ZhaoXi.WebSiteApi.Utility.SwaggerExt
{
    public static class CustomSwaggerExt
    {
        public static void AddSwaggerExt(this IServiceCollection services)
        {
            #region Swagger的配置

            services.AddEndpointsApiExplorer();
            services.AddSwaggerGen(option =>
            {
                // xml 文档文件绝对路径--读取根据控制器生成的xml文件
                var file = Path.Combine(AppContext.BaseDirectory,
                    "ZhaoXi.WebSiteApi.xml");
                // true: 显示控制器层注释
                option.IncludeXmlComments(file, true);
                // 对actuin的名称进行排序,如果有多个,就可以看到效果
                option.OrderActionsBy(o => o.RelativePath);

                typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
                {
                    option.SwaggerDoc(version, new OpenApiInfo()
                    {
                        Title = $"标题",
                        Version = version,
                        Description = $"版本号为{version}"
                    });
                });

            });
            #endregion
        }


        public static void UseSwaggerExt(this WebApplication app)
        {
           
            if (app.Environment.IsDevelopment())
            {
                app.UseSwagger();
                app.UseSwaggerUI(c =>
                {
                    foreach (string version in typeof(ApiVersion).GetEnumNames())
                    {
                        c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"第【{version}】版本");
                    }
                });
            }
          
        }
    }
}

替换Program.cs代码

相关推荐
ai小鬼头38 分钟前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
萧曵 丶1 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
老任与码2 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
华子w9089258592 小时前
基于 SpringBoot+VueJS 的农产品研究报告管理系统设计与实现
vue.js·spring boot·后端
星辰离彬3 小时前
Java 与 MySQL 性能优化:Java应用中MySQL慢SQL诊断与优化实战
java·后端·sql·mysql·性能优化
GetcharZp4 小时前
彻底告别数据焦虑!这款开源神器 RustDesk,让你自建一个比向日葵、ToDesk 更安全的远程桌面
后端·rust
jack_yin5 小时前
Telegram DeepSeek Bot 管理平台 发布啦!
后端
小码编匠5 小时前
C# 上位机开发怎么学?给自动化工程师的建议
后端·c#·.net
库森学长5 小时前
面试官:发生OOM后,JVM还能运行吗?
jvm·后端·面试
转转技术团队5 小时前
二奢仓店的静默打印代理实现
java·后端