Swagger基礎配置
1、非生產環境,不開啟Swagger,根據實際需要決定
2、設置項目屬性
xml文件地址:當前地址【Test.WebApi.xml】,其他項目地址【..\Test.WebApi\Test.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。