一:背景 1. 講故事 其實這個問題是前段時間有位朋友咨詢我的,由於問題說的比較泛,不便作答,但想想梳理一下還是能回答一些的,這篇就來聊一聊下麵這幾個鎖。 Interlocked AutoResetEvent / ManualResetEvent Semaphore 用戶態層面我就不想說了,網上一搜 ...
1.添加Nuget
install-package Swashbuckle.AspNetCore -project XXX -version 6.4.0
2.添加靜態類擴展方法
2.1.生成項目xml:選中項目 / 右鍵 / 屬性 / 生成 / 輸出 / 選中xml文檔文件
2.2.system_v1:必須唯一不重覆,且【options.SwaggerDoc("system_v1"】必須與【options.SwaggerEndpoint("/swagger/system_v1/】一致,不然會異常【Failed to load API definition; Fetch error: response status is 404 /swagger/system_v1/swagger.json】
1 /// <summary> 2 /// Swagger 靜態類 3 /// </summary> 4 public static class SwaggerExtend 5 { 6 /// <summary> 7 /// 添加服務: swagger 8 /// </summary> 9 /// <param name="services"></param> 10 /// <returns></returns> 11 public static void AddCustSwagger(this IServiceCollection services) 12 { 13 var version = "V1.0"; 14 var apiName = "XXX系統"; 15 services.AddSwaggerGen(options => 16 { 17 options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); 18 19 options.SwaggerDoc("system_v1", new OpenApiInfo 20 { 21 Version = version, 22 Title = $"{apiName} API", 23 Description = $"{apiName} {version} 介面服務" 24 }); 25 26 // 獲取應用程式所在目錄 27 var basePath = Path.GetDirectoryName(typeof(SwaggerExtend).Assembly.Location); 28 var xmlPath = Path.Combine(basePath, "ProjectName.xml"); 29 // swagger界面預設只顯示 方法&欄位 註釋,不顯示 控制器註釋 30 // 第二個參數為true, 則是controller的註釋 31 //options.IncludeXmlComments(xmlPath); 32 options.IncludeXmlComments(xmlPath, true); 33 }); 34 } 35 36 /// <summary> 37 /// 添加中間件: swagger 38 /// </summary> 39 /// <param name="app"></param> 40 public static void UseCustSwagger(this IApplicationBuilder app) 41 { 42 app.UseSwagger(); 43 app.UseSwaggerUI(options => 44 { 45 options.SwaggerEndpoint("/swagger/system_v1/swagger.json", "系統API"); 46 // 預設路徑為:/swagger/index.html 47 // 路由首碼 - 設置為空,可直接跳轉到swagger頁面:/index.html 48 // api測試可設置為空,部署時容易與前端路由衝突 49 options.RoutePrefix = string.Empty; 50 }); 51 } 52 }
3.StartUp註冊服務,添加中間件
public void ConfigureServices(IServiceCollection services) { services.AddCustSwagger(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseCustSwagger(); }