.Net Core 3.1瀏覽器後端服務(三) Swagger引入與應用
- 2021 年 2 月 20 日
- 筆記
- Web API、.Net Core
一、前言
前後端分離的軟體開發方式已逐步成為互聯網項目開發的業界標準,前後端分離帶來了諸多好處的同時,也帶來了一些弊端。
介面文檔的維護就是其中之一,起初前後端約定文檔規範,開發的很愉快,隨著時間推移、版本迭代、介面更改,介面文檔維護越來越麻煩。
相信很多前端開發者(請求方)都遇到過實際請求與介面文檔不一致的問題


什麼是Swagger?
Swagger是一個強大的介面文檔自動生成工具。
二、引入Swagger包
在Package Manager Console輸入如下命令
Install-Package Swashbuckle.AspNetCore -Version 6.0.7
或者在MWebAPI項目右鍵
選擇最新版本Install,安裝完成後添加Swagger服務注入及中間件配置
在Startup類的ConfigureServices方法中添加服務注入:
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo {Title = "Net Core API", Version = "v1"}); });
在Startup類的Configure方法中配置Swagger相關中間件:
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Net Core API"); });
F5運行項目
咦,Swagger文檔並未展示,這是由於默認啟動url未更改
修改launchSetting.json文件中launchUrl如下:
再次F5運行
預想的SwaggerUI展示出來了
三、添加註釋
1、首先添加文檔說明及作者資訊
修改Swagger服務注入部分
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Net Core API", Version = "v1", Description = "A simple DotNet core web API sample program", Contact = new OpenApiContact { Name = "Sirius", Email = "[email protected]", Url = new Uri("//www.cnblogs.com/mchao/"), Extensions = null, }, License = new OpenApiLicense { Name = "免費許可", Url = new Uri("//www.cnblogs.com/mchao/"), Extensions = null, } }); });
運行如下:
2、添加生成Controller的注釋說明
MWebAPI項目右鍵->properties->build->output
build項目會生成Controller.xml文件及內容(自動創建更新,無需手動維護)
接著在AddSwaggerGen方法中添加文檔路徑
services.AddSwaggerGen(c => {var xmlPath = Path.Combine(AppContext.BaseDirectory, "Controller.xml"); c.IncludeXmlComments(xmlPath, true); });
運行如下:
3、添加返回數據的注釋說明
MDto項目右鍵->properties->build->output
接著在AddSwaggerGen方法中添加文檔路徑
services.AddSwaggerGen(c => { var xmlDtoPath = Path.Combine(AppContext.BaseDirectory, "Dto.xml"); c.IncludeXmlComments(xmlDtoPath, true); });
運行
這裡有個異常,找不到Dto.xml,目前是這樣處理的,Dto.xml文件屬性 Copy to Outup Direcotry,如哪位道友有其他方案請告知。。。
再次運行
可看到Dto的注釋資訊
四、Api分組
1、增加分組
在Startup類的ConfigureServices方法中增加doc分組:
c.SwaggerDoc("V2", new OpenApiInfo { Title = "Net Core API V2", Version = "V2", Description = "A simple DotNet core web API sample program2", });
在Startup類的Configure方法中增加v2 json路徑
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/V1/swagger.json", "API V1"); c.SwaggerEndpoint("/swagger/V2/swagger.json", "API V2"); });
2、配置分組
給UserInfoController配置V1組
[ApiExplorerSettings(GroupName = "V1")] public class UserInfoController : Controller
給HomeController配置V2組
[ApiExplorerSettings(GroupName = "V2")] public class HomeController : Controller
運行:
五、結語
Swagger還有很多好用功能,比如自定義Swagger模板、Swagger開啟許可權驗證等,希望感興趣的道友繼續探索!!!