net5 webapi中 SwaggerUI如何进行版本控制
创建项目
net5就自带上了swaggerUI,见红色
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Net5.WebAPI", Version = "v1" }); }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Net5.WebAPI v1")); } app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }
代码改造
1.添加FirstController
public class FirstController : ControllerBase { /// <summary> /// 这是V1版本的GetString /// </summary> /// <returns></returns> [HttpGet] public string GetToString() { return Newtonsoft.Json.JsonConvert.SerializeObject(new { Id = 123, Name = "闪电五连鞭" }); } /// <summary> /// 这是V1版本的Add /// </summary> /// <returns>name</returns> [HttpPost] public string Add(string name) { return JsonConvert.SerializeObject(new { Id = 234, Name = name }); } [HttpPut] public int Update(int Id) { return Id; } [HttpDelete] public int Delete(int Id) { return Id; } [HttpPatch] public int Patch() { return 123; } }
新建文件夹V2, 放入新版本的代码
[Route("api/[controller]")] [ApiController] public class FirstController : ControllerBase { /// <summary> /// 这是V2版本的GetString /// </summary> /// <returns></returns> [HttpGet] public string GetToString() { return Newtonsoft.Json.JsonConvert.SerializeObject(new { Id = 123, Name = "闪电五连鞭" }); } /// <summary> /// 这是V2版本的Add /// </summary> /// <returns>name</returns> [HttpPost] public string Add(string name) { return JsonConvert.SerializeObject(new { Id = 234, Name = name }); } [HttpPut] public int Update(int Id) { return Id; } [HttpDelete] public int Delete(int Id) { return Id; } [HttpPatch] public int Patch() { return 123; } }
2.生成swagge有关项目的Xml注释文件,并修改其属性为“始终复制”
3.添加版本枚举类
public enum ApiVersions { V1 = 1, V2 = 2, V3 = 3, V4 = 4, V5 = 5 }
4.改造StartUp中swagger代码
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSwaggerGen(c => { typeof(ApiVersions).GetEnumNames().ToList().ForEach(version => { c.SwaggerDoc(version, new OpenApiInfo() { Title = "Net5.WebAPI", Version = version, Description = $"Net5.WebAPI的 {version} 版本,可根据需要选择" }); }); #region 为Swagger JSON and UI设置xml文档注释路径 string basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径) string xmlPath = Path.Combine(basePath, "Net5.WebAPI.xml"); c.IncludeXmlComments(xmlPath); #endregion // c.SwaggerDoc("v1", new OpenApiInfo { Title = "Net5.WebAPI", Version = "v1" }); }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { typeof(ApiVersions).GetEnumNames().ToList().ForEach(version => { c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"Net5.WebAPI {version}"); }); //c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Net5.WebAPI v1") }); } app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
添加版本号
在需要进行版本控制的控制器添加版本 [ApiExplorerSettings(GroupName = "V?")] [Route("api/V?/[controller]")]
大功告成,运行效果如下
源码下载
进下面的QQ群,在群在线文档里面
付费内容,请联系本人QQ:1002453261
本文来自博客园,作者:明志德道,转载请注明原文链接:https://www.cnblogs.com/for-easy-fast/p/14493847.html
分类:
18 工具使用技巧
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析