.Net Core小技巧 - Swagger适配虚拟目录及二级目录
前言
隨著前后端分離模式與微服務架構的出現,Web API變得越來越重要及普遍。而后出現的網關技術,使開發者更傾向于使用二級/多級目錄來暴露Web API,一是暴露的端口更少,方便管理;二是在網關中可以處理一些公共的事務,如認證。但swagger默認是適配根(root)目錄的,想要適配二級/多級目錄,需要額外處理,同時還要區分開發環境與其它環境。一種思路是在開發環境就讓Web API是處于二級目錄,此時可以在本機通過nginx和iis虛擬目錄來模擬,但這種思路明顯略微麻煩。另一種思路是通過配置多環境的方式實現。
?
步驟
1. 安裝Swagger
Install-Package Swashbuckle.AspNetCore?
2.??配置Swagger服務
services.AddSwaggerGen(c => {c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" }); });?
3. 配置swagger中間件
var virtualPath = Configuration["virtualPath"];app.UseSwagger(c => {c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = virtualPath); });app.UseSwaggerUI(c => {c.SwaggerEndpoint(virtualPath + "/swagger/v1/swagger.json", "My API V1");c.RoutePrefix = string.Empty; });?
4. 配置appsettings.json
在appsettings.json中添加virtualPath的配置:
{"virtualPath": "/sg", //假設二級目錄或虛擬目錄是/sg"Logging": {"IncludeScopes": false,"Debug": {"LogLevel": {"Default": "Warning"}},"Console": {"LogLevel": {"Default": "Warning"}}} }?
在appsettings.Development.json中添加virtualPath的配置:
{"virtualPath": "", //使用根目錄"Logging": {"IncludeScopes": false,"LogLevel": {"Default": "Debug","System": "Information","Microsoft": "Information"}} }?
測試
1. 開發環境測試
?
?
?
2. 模擬生產環境測試
修改launchSettings.json,改變環境變量參數:
?
?
準備nginx.conf,并啟動nginx。
worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream; sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location /sg/ {proxy_pass http://localhost:30925/; }} }?
訪問二級目錄
?
小結
本文涉及的代碼并不多,主要想表達的是設計思路,以及對多環境的處理方案,不得不說的是,.Net Core在環境適配以及其它方面的設計都十分優秀。
二級目錄適配雖然是個很小的問題,但是卻是微服務實踐中一個很常見的問題。
二級目錄適配能否自動適配而非配置適配,也是一個值得思考的問題。
?
源碼
https://github.com/ErikXu/.NetCoreTips/tree/master/SwaggerVirtualPath
轉載于:https://www.cnblogs.com/Erik_Xu/p/9195803.html
總結
以上是生活随笔為你收集整理的.Net Core小技巧 - Swagger适配虚拟目录及二级目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工银生肖信用卡可以取现吗
- 下一篇: 北交所股票代码开头是多少