ASP.NET Core – Swagger API Versioning
前言
Versioning 会导致 Swagger 直接坏掉. 因为 1 个文档无法支持多个版本. 所以需要每一个版本做一个文档.
主要参考
Integrating ASP.NET Core Api Versions with Swagger UI
What every ASP.NET Core Web API project needs - Part 2 - API versioning and Swagger
Docs – aspnet-api-versioning(最新版本,上面的是旧版本的参考)
Stack Overflow – iServiceCollection' does not contain a definition for 'addVersionedApiExplorer'
安装 Versioning.ApiExplorer
dotnet add package Asp.Versioning.Mvc.ApiExplorer
Program.cs
var apiVersioningBuilder = builder.Services.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
options.ReportApiVersions = true;
}).AddMvc(); apiVersioningBuilder.AddApiExplorer(options =>
{
options.GroupNameFormat = "'v'VVV";
options.SubstituteApiVersionInUrl = true;
});
AddApiVersioning 后会返回一个 versioning builder,利用它来继续 setup Swagger 的部分。
做一个 ConfigureSwaggerOptions.cs
把之前的 XML, OpenApiInfo 放进去, 关键就是让它变成动态创建, 依赖 version.
using System.Reflection;
using Asp.Versioning.ApiExplorer;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen; namespace WebApi; public class ConfigureSwaggerOptions(IApiVersionDescriptionProvider provider) : IConfigureNamedOptions<SwaggerGenOptions>
{
private readonly IApiVersionDescriptionProvider provider = provider; public void Configure(SwaggerGenOptions options)
{
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerDoc(description.GroupName, CreateVersionInfo(description)); var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
options.IncludeXmlComments(xmlPath);
}
} public void Configure(string? name, SwaggerGenOptions options)
{
Configure(options);
} private static OpenApiInfo CreateVersionInfo(ApiVersionDescription description)
{
var version = description.ApiVersion.ToString();
var info = new OpenApiInfo()
{
Title = "Project Web API",
Version = $"v{version}",
Description = $"DB&Project Web API version {version}",
Contact = new OpenApiContact
{
Name = "Derrick Yam",
Email = "hengkeat87@gmail.com",
},
};
if (description.IsDeprecated)
{
info.Description += " This API version has been deprecated.";
}
return info;
}
}
配置
builder.Services.ConfigureOptions<ConfigureSwaggerOptions>();
最后是 UI, 需要注入 IApiVersionDescriptionProvider
app.UseSwaggerUI(options =>
{
foreach (var description in app.Services.GetRequiredService<IApiVersionDescriptionProvider>().ApiVersionDescriptions)
{
options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", $"Project Web API v{description.ApiVersion}");
options.DocExpansion(DocExpansion.None);
}
});
这样就可以了
ASP.NET Core – Swagger API Versioning的更多相关文章
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...
- 在ASP.NET Core Web API上使用Swagger提供API文档
我在开发自己的博客系统(http://daxnet.me)时,给自己的RESTful服务增加了基于Swagger的API文档功能.当设置IISExpress的默认启动路由到Swagger的API文档页 ...
- ASP.NET Core Web API中使用Swagger
本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger 在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...
- asp.net core web api 生成 swagger 文档
asp.net core web api 生成 swagger 文档 Intro 在前后端分离的开发模式下,文档就显得比较重要,哪个接口要传哪些参数,如果一两个接口还好,口头上直接沟通好就可以了,如果 ...
- Asp.Net Core Web Api 使用 Swagger 生成 api 说明文档
最近使用 Asp.Net Core Web Api 开发项目服务端.Swagger 是最受欢迎的 REST APIs 文档生成工具之一,进入我的视野.以下为学习应用情况的整理. 一.Swagger 介 ...
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一)
一.创建ASP.NET Core Web API项目(若项目已创建,则可跳过本节内容) 1.双击打开VS2022. 2.单击"创建新项目",如下图. 3.选择"ASP.N ...
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(二)
传送门:从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一) 一.设置Swagger页面为首页--开发环境 我们虽然可以在输入 /swagger 后顺利的访问 ...
- List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac
List多个字段标识过滤 class Program{ public static void Main(string[] args) { List<T> list = new List& ...
- 或许是你应该了解的一些 ASP.NET Core Web API 使用小技巧
一.前言 在目前的软件开发的潮流中,不管是前后端分离还是服务化改造,后端更多的是通过构建 API 接口服务从而为 web.app.desktop 等各种客户端提供业务支持,如何构建一个符合规范.容易理 ...
- 支持多个版本的ASP.NET Core Web API
基本配置及说明 版本控制有助于及时推出功能,而不会破坏现有系统. 它还可以帮助为选定的客户提供额外的功能. API版本可以通过不同的方式完成,例如在URL中添加版本或通过自定义标头和通过Accept- ...
随机推荐
- git将某个开发分支最近的提交合并成一个提交
你可以使用 `git merge --squash` 命令将某个开发分支最近的提交合并成一个提交. 具体步骤如下: 1. 切换到你想要合并的分支上,比如 `develop` 分支: `git chec ...
- linux 查看crontab任务执行情况
首先创建一个定时任务,例如: */1 * * * * /usr/bin/curl http://******/admin/Keeperclock/keeper >> /data/wwwro ...
- 第五节 JMeter基础-初级登录【断言的好处】
声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 1.认识JMeter (1)断言 预期结果和实际结果的比较,如果不一样,断言失败. 2.注册 (1)直接复制[登录]粘贴一下 ...
- SUM-ACM天梯赛
第一次天梯赛: B-B:孵化小鸡 题解:二进制枚举所有可能性,一个一个枚举出来,@离散数学,真值表. 题目如下: 二进制枚举代码如下 点击查看代码 #include <bits/stdc++.h ...
- Vue 打包后自定义样式无法覆盖elementUI组件原有样式问题
Vue 打包后自定义样式无法覆盖elementUI组件原有样式问题 by:授客 QQ:1033553122 开发环境 Win 10 node-v10.15.3-x64.msi 下载地址 ...
- ABC341
E link 这个题目中所说的好的其实就是像\(010101\)这样一个\(0\),一个\(1\)的字符串. 那么不好的就是两个\(0\)或两个\(1\)在一起,所以判断一个区间好不好只需要判断一个区 ...
- CyberDog测试视频 —— 【开箱】小米"限量"机器狗!被我玩坏了...
地址: https://www.youtube.com/watch?v=3ntAhy3thXM PS. 现在的智能机器人其实真的没有人们想象中的那么智能.感觉现在的智能机器人最为有用的功能一个是倒地自 ...
- 中国版的huggingface——始智AI-wisemodel
新闻: 始智AI-wisemodel社区正式上线,目标打造中国版"HuggingFace" 首先要知道,AI火热了7,8年了,不论是国内还是国外一直有要搞模型分享的网站,但是这东西 ...
- 查看并添加python中库的搜索路径
根据前文 pip install --user 使用方法和注意事项--python中安装module库到用户packages路径中 我们知道python中除了自身的全局module lib路径以外还 ...
- 树莓派命令行配置wifi密码时如何实现密码加密(密文,非明文)
首先需要知道,树莓派系统(原生系统)的wifi配置文件为: /etc/wpa_supplicant/wpa_supplicant.conf 配置该文件时,psk属性为密码,往往我们都是使用明文来进行配 ...