zoukankan      html  css  js  c++  java
  • 在ASP.Net Core Web API中使用Swagger进行版本控制

    使用过程参考:在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、运行效果

  • 相关阅读:
    PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
    Codeforces 1282B2 K for the Price of One (Hard Version)
    1023 Have Fun with Numbers (20)
    1005 Spell It Right (20)
    1092 To Buy or Not to Buy (20)
    1118 Birds in Forest (25)
    1130 Infix Expression (25)
    1085 Perfect Sequence (25)
    1109 Group Photo (25)
    1073 Scientific Notation (20)
  • 原文地址:https://www.cnblogs.com/xhubobo/p/14445511.html
Copyright © 2011-2022 走看看