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群,在群在线文档里面

posted @   明志德道  阅读(649)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示