首页 > 编程语言 >Asp.Net Core 配置 Swagger

Asp.Net Core 配置 Swagger

时间:2023-04-02 12:13:53浏览次数:48  
标签:Core option 添加 version new Net Swagger Type

1. Swagger 版本控制

1. 1 添加版本枚举类

public enum ApiVersion
    {
        V1,
        V2,
        V3
    }

1.2 在启动类中添加Swagger的配置

builder.Services.AddSwaggerGen(option =>
            {
                #region 分版本的Swagger配置
                typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
                {

                    option.SwaggerDoc(version, new OpenApiInfo()
                    {
                        Version = version,
                        Title = $"版本{version}",
                        Description = $"版本描述{version}"
                    });
                });
                #endregion
            });
app.UseSwaggerUI(option =>
            {
                typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
                {
                    option.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"版本:{version}");
                });
            });

1.3 在Controller上添加版本标签

[ApiExplorerSettings(IgnoreApi =false,GroupName = nameof(ApiVersion.V1))]

 

 

2. 让Swagger页面显示注释

2.1  在项目属性--生成--输出 中 勾选 文档文件,项目在生成对于的xml文件,路劲可以不配置,默认为生成的根目录

 

 2.2 在项目启动类中添加Swagger相关配置

builder.Services.AddSwaggerGen(option =>
            {
                #region 配置展示配置
                //xml的绝对路劲
                var file = Path.Combine(AppContext.BaseDirectory, "MyTodo.Api.xml");
                //true:现实控制器层注释
                option.IncludeXmlComments(file, true);
                //对Action的名称进行排序
                option.OrderActionsBy(o => o.RelativePath);

                #endregion    
            });

 

3. Swagger 添加安全验证

3.1 添加JWT验证相关Nuget包

3.2 在项目启动类中添加Swagger相关配置

builder.Services.AddSwaggerGen(option =>
            {
               #region 扩展传入Token

                //添加安全定义
                option.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
                {
                    Description = $"请输入Token,格式为 Bearer xxxxxxxx (中间必须有空格)",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey,
                    BearerFormat = "JWT",
                    Scheme = "Bearer"
                });

                //添加安全要求
                OpenApiSecurityRequirement keyValuePairs = new OpenApiSecurityRequirement();
                keyValuePairs.Add(new OpenApiSecurityScheme()
                {
                    Reference = new OpenApiReference()
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id = "Bearer"
                    }
                }, new string[] { });

                option.AddSecurityRequirement(keyValuePairs);

                #endregion

            });

 

4. 添加文件上传按钮

4.1 添加FileUploadFilter

    /// <summary>
    /// 扩展文件上传,展示文件上传按钮
    /// </summary>
    public class FileUploadFilter : IOperationFilter
    {
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            //只针对表单提交
            const string FileUploadContentType = "multipart/form-data";
            if (operation.RequestBody == null)
            {
                return;
            }
            if (!operation.RequestBody.Content.Any(x => x.Key.Equals(FileUploadContentType, StringComparison.InvariantCultureIgnoreCase)))
            {
                return;
            }
            //第一个参数类型为IFormCollection
            if (context.ApiDescription.ParameterDescriptions[0].Type == typeof(IFormCollection))
            {
                operation.RequestBody = new OpenApiRequestBody()
                {
                    Description = "文件上传",
                    Content = new Dictionary<string, OpenApiMediaType>() {
                        {
                            FileUploadContentType,
                            new OpenApiMediaType()
                            {
                                Schema = new OpenApiSchema()
                                {
                                    Type = "object",
                                    Required = new HashSet<string>(){ "file"},
                                    Properties = new Dictionary<string, OpenApiSchema>() {
                                        { "file",
                                            new OpenApiSchema()
                                            {
                                                Type = "string",
                                                Format = "binary"
                                            }
                                        }
                                    }
                                }
                            } 
                        }
                    }
                };
            }
        }
    }

4.2 在项目启动类中添加Swagger相关配置

builder.Services.AddSwaggerGen(option =>
            {
                #region 扩展文件上传按钮

                option.OperationFilter<FileUploadFilter>();

                #endregion
            });

 

标签:Core,option,添加,version,new,Net,Swagger,Type
From: https://www.cnblogs.com/rain-alone/p/17280213.html

相关文章

  • 计网学习笔记五 wireless && mobile networks
    老师把无线网络用一节课一遍过了…感觉没能学透,便课后自己总结,看书,找资料补充,把无线网络大概摸了个七七八八。虽然不算精细,但还能看!内容包括WLAN总概,WiFi—WLAN的实现,802.11规定的帧结构,以及蜂窝网络。强烈推荐一本书:《802.11WirelessNetworks:TheDefinitiveGuide》,2ndEd......
  • .net反编译的九款神器
    .net反编译的九款神器  </h1> <divclass="clear"></div> <divclass="postBody">  本人搜集了下8款非常不错的.Net反编译利器:1、Reflector       Reflector是最为流行的.Net反编译工具。Reflector是由微软员工LutzRoeder编写的免费程序......
  • .net reactor 学习系列(五)---.net reactor针对De4Dot脱壳工具的应对
     De4Dot是一个专门反混淆.net程序的一个工具,支持对于以下工具混淆过的代码的清理:Agile.NET(akaCliSecure)Babel.NETCodeFortCodeVeilCodeWallCryptoObfuscatorDeepSeaObfuscatorDotfuscator.NETReactorEazfuscator.NETGoliath.NETILProtectorMaxtoCodeMPRESSRummageSkater.N......
  • Kubernetes 基本概念与组件
    Kubernetes(简称K8S)的出现是容器化技术发展的必然结果,容器化是应用程序级别的虚拟化,运行单个内核上有多个独立的用户空间实例,这些实例就是容器;容器提供了将应用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法,而且容器是共享一个内核的;由于容器技术的兴起......
  • [分享].Net脱壳利器de4dot介绍
    De4Dot是一个很强的.Net程序脱壳,反混淆工具,支持对于以下工具混淆过的代码的清理:如Xenocode、.NETReactor、MaxtoCode、Eazfuscator.NET、Agile.NET、PhoenixProtector、MancoObfuscator、CodeWall、NetZ.NETPacker、Rpx.NETPacker、Mpress.NETPacker、ExePack.NET......
  • 远程服务器(腾讯云轻量服务器)上安装SQL Server以及SQL Server Management Studio,以及EF
    SQLServer的安装下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads安装教程参考:https://blog.csdn.net/qq_51929833/article/details/122625809其中,这一步非常关键,因为在后续SSMS中,选用"SQLServer身份验证"时候的密码,默认用户名都是"sa"SQLServe......
  • 【v4l2】Linux多媒体框架 - v4l2 core详解
    简介V4L2是Videoforlinux2的简称,是Linux中关于视频设备的内核驱动框架。常用结构体:定义在include/linux/videodev2.hstructv4l2_requestbuffers//申请帧缓冲,对应命令VIDIOC_REQBUFSstructv4l2_capability//视频设备的功能,对应命令VIDIOC_QUERYCAPstr......
  • abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3下(五十九)
    Abp(netcore)+easyui+efcore实现仓储管理系统目录abp(netcore)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)abp(netcore)+easyui+efcore实现仓储管理系统——解决方案介绍(二)abp(netcore)+easyui+efcore实现仓储管理系统——领域层创建实体(三) abp(netcore)+eas......
  • 卷积神经网络(Convolutional Neural Network)
    前置芝士:神经网络前言人脑视觉机理,是指视觉系统的信息处理在可视皮层是分级的,大脑的工作过程是一个不断迭代、不断抽象的过程。视网膜在得到原始信息后,首先经由区域V1初步处理得到边缘和方向特征信息,其次经由区域V2的进一步抽象得到轮廓和形状特征信息,如此迭代地经由更多更高层......
  • dotnet-sharp 笔记(二)
    C#新特性泛型属性创建属性时可直接使用泛型//声明一个泛型属性publicclassGenericAttribute<T>:Attribute{}//使用[GenericAttribute<string>()]publicstringMethod()=>default;字符串内可插入换行符$"{\r\n}"原始字符串三个双引号开头并结尾,可以包含任......