.Net Core WebApi 版本控制
https://www.cnblogs.com/xhubobo/p/14445511.html
使用过程参考:在ASP.Net Core Web API中使用Swagger,本文在此基础上阐述如何进行API文档的版本控制。
1、添加API枚举类型

public enum ApiVersion
{
/// <summary>
/// v1版本
/// </summary>
V1 = 1,
/// <summary>
/// v2版本
/// </summary>
V2 = 2
}

2、注册Swagger服务

public void ConfigureServices(IServiceCollection services)
{
#region 注册Swagger服务
services.AddSwaggerGen(options =>
{
typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
{
options.SwaggerDoc(version, new OpenApiInfo()
{
Version = version,
Title = $"webapi {version}",
Description = $"Asp.NetCore Web API {version}"
});
});
});
#endregion services.AddControllers();
}

3、启用Swagger

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} //启用Swagger中间件
app.UseSwagger();
app.UseSwaggerUI(options =>
{
typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
{
options.SwaggerEndpoint($"/swagger/{version}/swagger.json", version);
});
}); app.UseRouting();
app.UseAuthorization(); app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

4、在控制器中使用ApiExplorerSettings标记

namespace WebApi.Controllers.V1
{
[Route("api/v1/[controller]")]
[ApiExplorerSettings(GroupName = "V1")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
[Route("Get")]
public string Get()
{
return "123456 v1";
}
}
}


namespace WebApi.Controllers.V2
{
[Route("api/v2/[controller]")]
[ApiExplorerSettings(GroupName = "V2")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
[Route("Get")]
public string Get()
{
return "123456 v2";
}
}
}

5、注意事项
(1) 在控制器中使用ApiExplorerSettings标记时,GroupName的值要和ApiVersion中的枚举名称一致,否则Swagger列出的API版本列表不会有该控制器的API,导致Swagger网页中该控制器API文档不会出现。
(2) 枚举类型ApiVersion不是必须的,只是用它来获取版本列表,例如可以使用new List<string>() { "V1", "V2" }.ForEach代替typeof(ApiVersion).GetEnumNames().ToList().ForEach。
6、运行效果
.Net Core WebApi 版本控制的更多相关文章
- ASP.NET Core WebApi版本控制
前言: 在日常项目开发中,随着项目需求不断的累加.不断的迭代:项目服务接口需要向下兼容历史版本:前些时候就因为Api接口为做版本管理导致接口对低版本兼容处理不友好. 最近就像了解下如何实现WebApi ...
- Asp.Net.Core WebApi 版本控制
前言 在后端Api的开发过程中,无法避免的会遇到接口迭代的过程,如何保证新老接口的共存和接口的向前的兼容呢,这时候就需要对Api进行版本的控制,那如何优雅的控制Api的版本呢? 开始 Microsof ...
- ASP.Net Core WebApi几种版本控制对比
版本控制的好处: (1)助于及时推出功能, 而不会破坏现有系统. (2)它还可以帮助为选定的客户提供额外的功能. API 版本控制可以采用不同的方式进行控制,方法如下: (1)在 URL 中追加版本或 ...
- Net Core WebApi几种版本控制对比
Net Core WebApi几种版本控制对比 一.版本控制的好处: (1)有助于及时推出功能, 而不会破坏现有系统. (2)它还可以帮助为选定的客户提供额外的功能. API 版本控制可以采用不同的方 ...
- 零基础ASP.NET Core WebAPI团队协作开发
零基础ASP.NET Core WebAPI团队协作开发 相信大家对“前后端分离”和“微服务”这两个词应该是耳熟能详了.网上也有很多介绍这方面的文章,写的都很好.我这里提这个是因为接下来我要分享的内容 ...
- ASP.NET Core WebApi构建API接口服务实战演练
一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...
- .Net Core WebAPI 基于Task的同步&异步编程快速入门
.Net Core WebAPI 基于Task的同步&异步编程快速入门 Task.Result async & await 总结 并行任务(Task)以及基于Task的异步编程(asy ...
- asp.net core webapi之跨域(Cors)访问
这里说的跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作 ...
- ASP.NET Core WebAPI 开发-新建WebAPI项目
ASP.NET Core WebAPI 开发-新建WebAPI项目, ASP.NET Core 1.0 RC2 即将发布,我们现在来学习一下 ASP.NET Core WebAPI开发. 网上已经有泄 ...
- Asp.net Core WebApi 使用Swagger做帮助文档,并且自定义Swagger的UI
WebApi写好之后,在线帮助文档以及能够在线调试的工具是专业化的表现,而Swagger毫无疑问是做Docs的最佳工具,自动生成每个Controller的接口说明,自动将参数解析成json,并且能够在 ...
随机推荐
- 独家推荐!这款端到端AI测试工具 Testim,让效率飙升!(支持移动端、Web端)
在当今快速发展的软件开发时代,确保软件质量成为每个开发团队的首要任务. 随着人工智能(AI)和机器学习(ML)技术的飞速发展,AI测试工具应运而生,为软件测试领域带来了革命性的变化.今天,我要向大家强 ...
- Java 数据库开发总结
数据库连接.设计以及备份技巧集锦 JDBC操作各种数据库经验技巧集萃 Java 数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 ...
- 遇到的问题之“web container destroy and kill the job.-Web容器销毁和终止作业”
一.问题 JobThread toStop, stopReason:web container destroy and kill the job. 2023-11-22 18:10:10 [com.x ...
- K8s新手系列之Endponit
概述 官方文档:https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/service-resources/endpoints-v1/ En ...
- django笔记(3)-数据库操作
一:路由系统 url 1.url(r'^index/', views.index),url(r'^home/',views.Home.as_view()), 一个url对应一个函数或一个类 ...
- Coze 初体验之打造专属的编程助手
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- 转|java反射方法和使用
概述 java中不通过new关键字获取对象并且使用类对象中的成员变量和方法,第一时间我们会想到可以使用反射去实现这些功能.反射很强大,而且是Spring的常用轮子,故我们学会了它就可以搭配很多东西 ...
- 一个简单的 dockerfile 示例
# 基于golang最新版本的镜像 FROM golang:latest # 设置维护者标签 LABEL maintainer="xxx@gmail.com" # 将当前目录下的所 ...
- PINN做脆性材料裂纹扩展的损失函数设计
- mysql安全小结
sql的注入是一个很困扰人的问题,一些恶意攻击者可以利用sql注入来获取甚至是修改数据库中的信息,尤其是一些比较敏感的密码一类的数据. sql注入主要利用mysql 的注释将后续应正常执行的语句注释掉 ...