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

    作者:课间一起牛

    出处:https://www.cnblogs.com/mhg215/

    声援博主:如果您觉得文章对您有帮助,请点击文章末尾的【关注我】吧!

    别忘记点击文章右下角的【推荐】支持一波。~~~///(^v^)\~~~ .

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    如果您有其他问题,也欢迎关注我下方的公众号,可以联系我一起交流切磋!

     B站: 课间一起牛的B站         知乎:课间一起牛的知乎

    码云:课间一起牛的码云      github:课间一起牛的github

  • 相关阅读:
    翻译MDN里js的一些方法属性
    ajax相关
    我的面试错题
    写代码通用思路
    工厂模式
    cookie & session
    X-UA-Compatible设置IE浏览器兼容模式
    [转]IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解决方案
    EasyUseCase 一款脑图转化 Excel 测试用例工具 (1.2 版本升级)
    XMind2TestCase:一个高效测试用例设计的解决方案!
  • 原文地址:https://www.cnblogs.com/mhg215/p/14517412.html
Copyright © 2020-2023  润新知