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。