工作上遇到的問題 , 由於廠商沒辦法連入內網看到我們的 swagger api 文件 之前都是用些很沒效率的方法處理 , 碰巧又遇到 api 要修改的問題 , 這把就把這個搞定
舊版 首先找到這個地方安裝 redoc-cli 
1 2 npm install -g redoc-cli redoc-cli bundle -o index.html openapi.json 
 
他還可以自訂額外屬性 , 像是最重要的 logo , 用法就是自己補 x-logo 在你的 openapi.json 裡面即可 詳細可以看他文件說明 
1 2 3 4 5 6 7 8 9 10 11 {   "info" : {     "version" : "1.0.0" ,     "title" : "Swagger Petstore" ,     "x-logo" : {       "url" : "https://redocly.github.io/redoc/petstore-logo.png" ,       "backgroundColor" : "#FFFFFF" ,       "altText" : "Petstore logo"      }   } } 
 
新版 目前已改用新版 , 不過要編他的東西前要先看下有沒有 Supported in Redoc CE , 不然也是白忙一場
1 2 npm i -g @redocly/cli@latest redocly build-docs v1.json --output=index.html 
 
想要加入 logo 可以看這裡的說明  , 好像跟舊版差不多 新版還可以插入 markdown 這個挺酷 , 說明看此 
1 2 3 4 5 6 7 8 9 10 11 12 {   "info" : {     "version" : "1.0.0" ,     "title" : "Swagger Petstore" , 	"description" : { "$ref"  : "test.md"  },     "x-logo" : {       "url" : "https://redocly.github.io/redoc/petstore-logo.png" ,       "backgroundColor" : "#FFFFFF" ,       "altText" : "Petstore logo"      }   } } 
 
test.md
 
在舊版 .net 加入 x-logo 因為是維護 .net 4.x 的 api 如果想要直接在 swagger 增加 x-logo 屬性可以這樣用 先找到 SwaggerConfig.cs
1 2 3 4 5 6 7 GlobalConfiguration.Configuration .EnableSwagger(c => 	{ 		c.SingleApiVersion("v1", "ladisai-api"); 		c.DocumentFilter<SwaggerAddXLogo>(); 		//其他 code ... 	} 
 
然後實作 IDocumentFilter 即可 , 這裡就拿 google 當範例
1 2 3 4 5 6 7 8 9 10 11 12 public class SwaggerAddXLogo : IDocumentFilter { 	public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) 	{ 		//加上額外的屬性讓建立離線 swagger 文件的工具 redocly build-docs 可以吃到 logo 		Dictionary<string, string> xlogo = new Dictionary<string, string>(); 		xlogo.Add("url", "https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"); 		xlogo.Add("backgroundColor", "#FFFFFF"); 		xlogo.Add("altText", "google"); 		swaggerDoc.info.vendorExtensions.Add("x-logo", xlogo); 	} } 
 
join 另外他還有個超酷的功能 join , 如果有多個不同 api 就可以一口氣轉為一份文件 , 也是挺不錯用 , 不過要注意只支援 OpenAPI 3.x 可以到 這裡  去轉換自己的版本
1 2 redocly join pet-swagger.json secret-swagger.json -o join.json redocly build-docs join.json --output=join.html 
 
.net 6 加入 x-logo 如果是寫 .net 6 的話可以這樣設定
發現圖片也可以吃 base64 , 需要的話可以到這個 網站  去轉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 builder.Services.AddSwaggerGen(x => {     var xlogoProp = new OpenApiObject();     xlogoProp.Add("url", new OpenApiString("https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"));     xlogoProp.Add("backgroundColor", new OpenApiString("#FFFFFF"));     xlogoProp.Add("altText", new OpenApiString("google"));     x.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo     {         Version = "v1",         Title = "SecretApi",         Extensions = new Dictionary<string, IOpenApiExtension>()         {             { "x-logo" , xlogoProp }         }     }); ; });