• .net5


     Swagger基础配置

    1、非生产环境,不开启Swagger,根据实际需要决定

    2、设置项目属性

      xml文件地址:当前地址【Test.WebApi.xml】,其他项目地址【..Test.WebApiTest.WebApi.xml】

    3、修改服务注册、注意修改xml文件名称

            public Startup(IConfiguration configuration, IHostEnvironment env)
            {
                Configuration = configuration;
                Env = env;
            }
    
            public IHostEnvironment Env { get; }
    
            private readonly string apiName = "基础用户信息服务";
    
                #region Swagger
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo
                    {
                        Version = "v1",//版本号
                        Title = $"{apiName} 接口文档——dotnetcore 5.0",//编辑标题
                        Description = $"{apiName} HTTP API V1",//编辑描述
                        //Contact = new OpenApiContact { Name = apiName, Email = "2334344234@163.com" },//编辑联系方式
                        License = new OpenApiLicense { Name = apiName }//编辑许可证
                    });
                    c.OrderActionsBy(o => o.RelativePath);
    
                    var xmlPath = Path.Combine(Env.ContentRootPath, "Test.WebApi.xml");// linux区分大小写
                    c.IncludeXmlComments(xmlPath, true); // 把接口文档的路径配置进去。第二个参数表示的是是否开启包含对Controller的注释容纳【第二个参数可以不加】
                });
                #endregion
    
     Swagger设置参数(折叠、不显示Models【Schemas】)

                        c.DocExpansion(DocExpansion.None);//DocExpansion设置为none可折叠所有方法
                        c.DefaultModelsExpandDepth(-1);//DefaultModelsExpandDepth设置为-1 可不显示models【Schemas】
    

      

     Swagger控制器的注释与排序

    WebApi项目下新建【Swagger】文件夹,新建【AuthTagDescriptions】并继承【IDocumentFilter】

    using Microsoft.OpenApi.Models;
    using Swashbuckle.AspNetCore.SwaggerGen;
    using System.Collections.Generic;
    
    namespace Test.WebApi.Swagger
    {
        public class AuthTagDescriptions : IDocumentFilter
        {
            public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
            {
                swaggerDoc.Tags = new List<OpenApiTag>
                {
                    new OpenApiTag{ Name = "OrgUnit", Description = "组织单元" },
                    new OpenApiTag{ Name = "Employee", Description = "职员维护" },
                    new OpenApiTag{ Name = "WeatherForecast", Description = "天气预报" }
                };
            }
        }
    }
    

     在StartUp类中注入类:

                    c.DocumentFilter<AuthTagDescriptions>();// 注入【注释/排序】文档
    

      

     Swagger版本控制

    添加枚举类(这个不是必须的):

    namespace Test.WebApi.Swagger
    {
        /// <summary>
        /// Swagger版本枚举
        /// </summary>
        public enum ApiVersion
        {
            /// <summary>
            /// v1版本
            /// </summary>
            V1 = 1,
            /// <summary>
            /// v2版本
            /// </summary>
            V2 = 2
        }
    }
    

    2、StartUp注册服务:

                    //版本控制
                    typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
                    {
                        c.SwaggerDoc(version, new OpenApiInfo()
                        {
                            Version = version,
                            Title = $"webapi {version}",
                            Description = $"Asp.NetCore Web API {version}"
                        });
                    });
    

     3、启用Swagger

                        typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
                        {
                            c.SwaggerEndpoint($"/swagger/{version}/swagger.json", version);
                        });
    

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

        [ApiExplorerSettings(GroupName = "V2")]
    

     5、注意事项:

    (1) 在控制器中使用ApiExplorerSettings标记时,GroupName的值要和ApiVersion中的枚举名称一致,否则Swagger列出的API版本列表不会有该控制器的API,导致Swagger网页中该控制器API文档不会出现。

    (2) 枚举类型ApiVersion不是必须的,只是用它来获取版本列表,例如可以使用new List<string>() { "V1", "V2" }.ForEach代替typeof(ApiVersion).GetEnumNames().ToList().ForEach。

  • 相关阅读:
    javascript里面&&和||
    Who am I?
    Mis开发过程中的不同角色(忽略外包的情况下)
    重蹈覆辙?
    适时使用Photo Courtesy
    【LeetCode练习题】Reverse Linked List II
    【C++】大数的+-*/四则运算
    【LeetCode练习题】Multiply Strings
    【LeetCode练习题】Evaluate Reverse Polish Notation
    【LeetCode练习题】Merge k Sorted Lists
  • 原文地址:https://www.cnblogs.com/gygtech/p/14464193.html
Copyright © 2020-2023  润新知