關於.netcore 模塊化框架系列文章
極簡實用的Asp.NetCore模塊化框架決定免費開源了(一)
ASP.NET Core如何自動生成小寫的破折號路由(二)
目的
說到Asp.Net Core配置swagger,網上的文章數不勝數,這里重新寫篇文章一方面主要在於加強自己的學習,另一方面做好swagger的授權驗證配置。
配置
nuge引用兩個包
1、Swashbuckle.AspNetCore
2、Swashbuckle.AspNetCore.Filters
3、下面附上我的swagger擴展類
public static class SwaggerExtesion { public static void AddSwaggerSetup(this IServiceCollection services) { services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = $"接口文檔——{RuntimeInformation.FrameworkDescription}", Version = "v1", Description = "HTTP API" }); c.OrderActionsBy(o => o.RelativePath); var basePath = PlatformServices.Default.Application.ApplicationBasePath; var files = Directory.GetFiles(basePath, "*.xml"); foreach (var file in files) { c.IncludeXmlComments(file, true); if (file.Contains("ShenNius.Share.Models.xml")) { c.IncludeXmlComments(file); } } //var baseModelPath = AppContext.BaseDirectory; //var xmlModelPath = Path.Combine(basePath, "ShenNius.Share.Models.xml");//這個就是Model層的xml文件名 //c.IncludeXmlComments(xmlModelPath); c.CustomOperationIds(apiDesc => { return apiDesc.TryGetMethodInfo(out MethodInfo methodInfo) ? methodInfo.Name : null; }); // TODO:一定要返回true! c.DocInclusionPredicate((docName, description) => { return true; }); ////https://github.com/domaindrivendev/Swashbuckle.AspNetCore // 開啟加權小鎖 c.OperationFilter<AddResponseHeadersFilter>(); c.OperationFilter<AppendAuthorizeToSummaryOperationFilter>(); //// 在header中添加token,傳遞到后台 c.OperationFilter<SecurityRequirementsOperationFilter>(); // 很重要!這里配置安全校驗,和之前的版本不一樣 c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme { Description = "JWT授權(數據將在請求頭中進行傳輸) 直接在下框中輸入Bearer {token}(注意兩者之間是一個空格)\"", Name = "Authorization",//jwt默認的參數名稱 In = ParameterLocation.Header,//jwt默認存放Authorization信息的位置(請求頭中) Type = SecuritySchemeType.ApiKey, Scheme = "Bearer", }); // c.AddFluentValidationRules(); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme{ Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new[] { "readAccess", "writeAccess" } } }); }); } public static void UseSwaggerMiddle(this IApplicationBuilder app) { app.UseSwagger(); app.UseSwaggerUI(c => { c.DefaultModelExpandDepth(2); c.DefaultModelRendering(ModelRendering.Example); c.DefaultModelsExpandDepth(-1); c.DisplayRequestDuration(); c.DocExpansion(DocExpansion.None); c.EnableDeepLinking(); c.EnableFilter(); c.MaxDisplayedTags(int.MaxValue); c.ShowExtensions(); c.EnableValidator(); c.SwaggerEndpoint("/swagger/v1/swagger.json", "ShenNius API v1"); c.RoutePrefix = string.Empty; }); } }
4、在OnConfigureServices方法中注入context.Services.AddSwaggerSetup();
說明
關於上面的配置是關於我ShenNius.Framework和swagger的結合,只是和.net core中的配置略有不同而已。
暫時就寫到這里吧,每次文章寫的很長,反而很多人看不下去,我將功能點拆分出來,每次盡量只耽誤3、4分鍾的樣子,點進文章之后能快速看到核心的東西,保證有收獲。