關於Asp.Net Core如何更完美地配置swagger(三)


 

關於.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分鍾的樣子,點進文章之后能快速看到核心的東西,保證有收獲。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM