关于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分钟的样子,点进文章之后能快速看到核心的东西,保证有收获。

 

posted @   realyrare  阅读(745)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示