1. AddSwaggerGen

AddSwaggerGen 是配置多个版本的swagger的关键

Path.Combine 当前项目运行的路径

UseSwaggerUI

主要分为 2 步骤  :

  1. 注册 Swagger

  2. 使用 Swagger

为了不让program.cs 文件夹内容过于冗余 复杂 我们把步骤  1和 2 写成扩展的方法

program.cs 入口文件夹:

using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using WebApplication1.Utility.SwaggerExt; namespace WebApplication1
{
public class Program
{
/// <summary>
/// asdlfkasdio
/// </summary>
/// <param name="args"></param>
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers();
// 注册 Swagger
CtmSwaggerExt.AddSwaggerExt(builder); var app = builder.Build(); // IsDevelopment 是否是开发环境
if (app.Environment.IsDevelopment())
{
CtmSwaggerExt.UseSwaggerExt(app);
} app.UseAuthorization(); app.MapControllers(); app.Run();
}
}
}

Utility 文件夹 用于存放扩展的方法 ;

ApiVersions.cs :

namespace WebApplication1.Utility.SwaggerExt
{
/// <summary>
/// Swagger的版本控制
/// 使用枚举
/// </summary>
public enum ApiVersions
{
front_dev,
after_admin
}
}

CtmSwaggerExt.cs:

using Microsoft.OpenApi.Models;

namespace WebApplication1.Utility.SwaggerExt
{
/// <summary>
/// 自定义 Swagger扩展
/// 静态类中的静态方法
/// 扩展的方法都是使用静态类中的静态方法???
/// </summary>
public static class CtmSwaggerExt
{
/// <summary>
/// 注册 Swagger 的扩展方法
/// this 的作用是什么
/// builder 是 WebApplicationBuilder 的数据格式
/// </summary>
/// <param name="builder"></param>
public static void AddSwaggerExt(this WebApplicationBuilder builder)
{
var arr = typeof(ApiVersions).GetEnumNames().ToList();
builder.Services.AddEndpointsApiExplorer();
// swagger 配置
// 如果只要一个版本 builder.Services.AddSwaggerGen()即可
// 多个版本要用 option 配置
builder.Services.AddSwaggerGen(option =>
{
// 通过版本枚举循环展示不同版本的swagger项目
Console.WriteLine("option开始配置多个swagger版本配置");
// 1. 枚举类型的数据格式转换List格式
arr.ForEach(version =>
{
// ps 使用 OpenApiInfo 需要引入 using Microsoft.OpenApi.Models;
option.SwaggerDoc(version, new OpenApiInfo()
{
// 标题
Title = $"{version}===标题",
Version = $"{version}标注",
Description = $"版本说明 {version}"
});
});
// 2. 需要修改项目的属性 的生成 ==》 输出 ===》 文档文件 ==》 生成API文件 eg: WebApplication1.xml 文件
// 找到文档的绝对路径 xml 文件展示了控制器的注释内容[是要是文档注释都会显示的]
var file = Path.Combine(AppContext.BaseDirectory, "WebApplication1.xml");
Console.WriteLine(file); // C:\Users\朱龙旭\Desktop\WebApplication1\WebApplication1\bin\Debug\net6.0\WebApplication1.xml
// 显示控制器层注释
option.IncludeXmlComments(file, true);
// 对action 的名称进行排序,如果有多个,就可以看见效果了
// option.OrderActionsBy(o => o.RelativePath);
}); } /// <summary>
/// 使用 Swagger 的扩展方法
/// app 是 WebApplication 数据类型
/// </summary>
/// <param name="app"></param>
public static void UseSwaggerExt(this WebApplication app)
{
var arr = typeof(ApiVersions).GetEnumNames().ToList();
app.UseSwagger();
app.UseSwaggerUI(option =>
{
foreach (string version in arr)
{
// swagger.json 里面都是接口信息了
option.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"{version}");
}
});
} }
}

控制器内容:

using Microsoft.AspNetCore.Mvc;
using WebApplication1.Utility.SwaggerExt; namespace WebApplication1.Controllers
{
/// <summary>
/// 测试注释是否展示
/// </summary>
[ApiController]
[Route("[controller]")]
// 指定当前的控制器是哪个Swagger版本的 指定给 后台_version02
[ApiExplorerSettings(IgnoreApi = false,GroupName = nameof(ApiVersions.after_admin))]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
}; private readonly ILogger<WeatherForecastController> _logger;
/// <summary>
/// DI
/// </summary>
/// <param name="logger"></param>
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
/// <summary>
/// GET方法
/// </summary>
/// <returns></returns>
[HttpGet(Name = "GetWea阿斯顿rFoasasst")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
} /// <summary>
/// POST方法
/// </summary>
/// <returns></returns>
[HttpPost]
public IEnumerable<WeatherForecast> PostInfo()
{
// 随机生成 5 条对象数据 WeatherForecast 类型的
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
test = "adsfasd",
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
} /// <summary>
/// PUT方法
/// </summary>
/// <returns></returns>
[HttpPut]
public IEnumerable<WeatherForecast> PutInfo()
{
// 随机生成 5 条对象数据 WeatherForecast 类型的
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
test = "adsfasd",
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
/// <summary>
/// DELETE方法
/// </summary>
/// <returns></returns>
[HttpDelete]
public IEnumerable<WeatherForecast> DeleteInfo()
{
// 随机生成 5 条对象数据 WeatherForecast 类型的
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
test = "adsfasd",
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}

001 C#配置多个版本Swagger说明的更多相关文章

  1. CentOS 6.5移除openJDK及JDK安装环境变量配置及JDK版本切换

    一.查找已经安装的open JDK [root@localhost ~]# rpm -qa|grep jdk java--openjdk-.el6_3.x86_64 java--openjdk-1.7 ...

  2. an'gularjs 环境搭建之NodeJS、NPM安装配置步骤(windows版本)

    NodeJS.NPM安装配置步骤(windows版本)  :http://xiaoyaojones.blog.163.com/blog/static/28370125201351501113581/ ...

  3. windows下安装和配置多个版本的JDK

    https://jingyan.baidu.com/article/47a29f2474ba55c015239957.html 如何在windows下安装和配置多个版本的jdk,本文将带你在windo ...

  4. windows配置Python多版本共存

    windows配置Python多版本共存 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 最近Python开发蛮火的,三年前我的一个运维朋友就告诉我说Python语言将来会很火,当时 ...

  5. tomcat如何配置俩个版本

    Java-web除了JDK,还需配置服务器(tomcat); 如何配置俩个版本的tomcat; 1.将tomcat-bin目录下的startup.bat和catalina.bat里的%CATALINA ...

  6. struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本

    [本文简介] struts 多文件上传.基于”零配置“+"ajaxfileupload" 的一个简单例子. [导入依赖jar包] jquery-1.7.2.js : http:// ...

  7. VBA连接MySQL数据库以及ODBC的配置(ODBC版本和MySQL版本如果不匹配会出现驱动和应用程序的错误)

    db_connected = False '获取数据库连接设置dsn_name = Trim(Worksheets("加载策略").Cells(2, 5).Value)  ---- ...

  8. maven工程指定jdk版本,maven全局配置jdk的版本

  9. rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装

    rancher说明为什么需要按照指定版本安装以及rancher和节点linux环境配置-docker指定版本安装 待办 https://blog.csdn.net/CSDN_duomaomao/art ...

  10. Python安装环境配置和多版本共存

    Python安装环境配置和多版本共存 1.环境变量配置: (1) 右键点击"计算机",然后点击"属性" (2) 然后点击"高级系统设置" ( ...

随机推荐

  1. GeoScene Enterprise 3.1 临时许可更新

    Portal许可更新 portal 的许可更新很简单,直接打开Portal在线更新就好了 平台管理 -> 许可管理 -> 附加许可 -> 导入许可 -> 选择文件(选择授权的j ...

  2. 【Maxwell】01 安装及入门

    官网地址: https://maxwells-daemon.io/ 下载地址(版本发行): https://github.com/zendesk/maxwell/releases 参考教程自尚硅谷视频 ...

  3. 【Windows】搭建FTP服务器

    1.开启FTP服务和IIS服务 2.设置IIS服务 添加FTP站点[右键] 设置站点名称和物理路径 绑定IP地址和FTP端口号 可以自定义虚拟主机名称 下面勾选[无SSL]即可 身份验证和授权设置 在 ...

  4. python科学计算:加速库numba —— 安装和试用

    安装(anaconda环境下) conda install numba Demo代码: from numba import jit from numpy import arange import nu ...

  5. 【英伟达】GTC 2024|黄仁勋2小时演讲精华版|六大亮点| Blackwell GPU | DGX B200 | NVL72 | cuLitho | GROOT | Omniverse Cloud —— 智能机器人元年

    视频地址: https://www.youtube.com/watch?v=zBIddyiMXsU

  6. 什么样的AI计算框架才是受用户喜欢的?

    说明,本文是个人的一些胡想. 背景: AI计算框架现在从国外的百家争鸣过度到了国内百家争鸣的局面了.在7.8年前的时候,国外的AI计算框架简直是数不胜数,从14.15年前Nvidia公司的显卡需要手动 ...

  7. 从hp的暗影精灵4来看移动cpu的实际性能表现与官方出厂性能数据之间的差距

    手上有一款暗影精灵4的笔记本,CPU为i7-9750H,官方给出的睿频为4.5Ghz,但是自己使用过程中最高睿频只能达到3.9Ghz与4.1Ghz之间,根本就没有超过4.1Ghz的时候. (图的原网址 ...

  8. 根据baselines库修改的运行输入参数的解析代码

    如题: def arg_parser(): """ Create an empty argparse.ArgumentParser. """ ...

  9. mmdetection使用未定义backbone训练

    首先找到你需要用到的 backbone,一般有名的backbone 都会在github有相应的代码开源和预训练权重提供 本文以mobilenetv3 + fastercnn 作为举例,在mmdetec ...

  10. MFC连接Access2007数据库

    // TODO: 在此添加额外的初始化代码 //初始化ADO环境 if (!AfxOleInit()) { AfxMessageBox(L"OLE初始化失败"); return F ...