zoukankan      html  css  js  c++  java
  • .net core webapi 定义多版本与 Swagger 的文档输出

    前提:

      需要nuget  以下两个程序集

            Swashbuckle.AspNetCore 我暂时用的是  4.01;

            Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer    2.2.0

    描述:解决 .net core  webapi 同一个项目中,多个版本的控制及文档输出;

     Controllers 层次如下:

    实际效果:(引用他人的git图片)

      

    解决办法:

      步骤1  对startup.cs 进行修改代码如下:

        1.1 增加私有变量:  

    /// <summary>
    /// Api版本提者信息
    /// </summary>
    private IApiVersionDescriptionProvider provider;

        1.2 在配置服务 ConfigureServices 中增加如下代码:

                services.AddApiVersioning(option =>
                {
                    option.AssumeDefaultVersionWhenUnspecified = true;
                    option.ReportApiVersions = false;
                })
                .AddMvcCore().AddVersionedApiExplorer(option =>
                {
                    option.GroupNameFormat = "'v'VVV";
                    option.AssumeDefaultVersionWhenUnspecified = true;
                });
    
                this.provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();
                services.AddSwaggerGen(options =>
                {
                    foreach (var description in provider.ApiVersionDescriptions)
                    {
                        options.SwaggerDoc(description.GroupName,
                             new Info()
                             {
                                 Title = $"接口 v{description.ApiVersion}",
                                 Version = description.ApiVersion.ToString(),
                                 Description = "切换版本请点右上角版本切换"
                             }
                        );
                    }
                  options.IncludeXmlComments(this.GetType().Assembly.Location.Replace(".dll", ".xml"), true);
                });

        1.3 在配置http管道 Configure 中增加如下代码:

                app.UseSwagger();
                app.UseSwaggerUI(c =>
                {
                    foreach (var description in provider.ApiVersionDescriptions)
                    {
                        c.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
                    }
                });

       步骤2 对Controllers 配置相应版本信息

      不同的版本只需改变    [ApiVersion("x.x.x")]

        /// <summary>
        /// 1.0 版本
        /// </summary>
        [ApiController]
        [ApiVersion("1.0")]
        [Route("api/v{version}/[controller]/[action]")]
        public class EasenController : ControllerBase
        {
             ..................
        }

      步骤3 为了更好的在Swagger 文档调试的时候自动填入相应的版本号进行优化

        3.1 增加 SwaggerOperationFilter.cs 代码如下:

        /// <summary>
        /// Swagger 过滤器
        /// </summary>
        public class SwaggerOperationFilter : IOperationFilter
        {
            /// <summary>
            /// 应用过滤器
            /// </summary>
            /// <param name="operation"></param>
            /// <param name="context"></param>
            public void Apply(Operation operation, OperationFilterContext context)
            {
                #region Swagger版本描述处理
                foreach (var parameter in operation.Parameters.OfType<NonBodyParameter>())
                {
                    var description = context.ApiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name);
                    if (parameter.Description == null)
                    {
                        parameter.Description = "填写版本号如:1.0";
                        parameter.Default = context.ApiDescription.GroupName.Replace("v", "");
                    }
                }
                #endregion
          }
    }

          3.2 在 startup.cs   ConfigureServices  中对 AddSwaggerGen 配置项进行修改代码如下:

            services.AddSwaggerGen(options =>
            {
                    ...............
                    options.OperationFilter<SwaggerOperationFilter>(); 
    });
  • 相关阅读:
    一些程序员可以了解的项目/内容
    为人处世的细节(转自知乎):不炫富, 不哭穷
    centos 6.5 搭建ftp 服务器(vsftpd的配置文件说明)
    linux安装脚本
    Sublime Text3 + Golang搭建开发环境
    go语言环境搭建+sublime text3(windows环境下)
    Enterprise Solution 企业管理软件开发框架
    DotnetSpider爬虫采集博客园
    underscore.js 源码
    Xamarin
  • 原文地址:https://www.cnblogs.com/intotf/p/10075331.html
Copyright © 2011-2022 走看看