欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net core webapi 文件上传在 Swagger 文档中的有好提示处理

程序员文章站 2022-06-03 09:46:19
前提: 需要nuget Swashbuckle.AspNetCore 我暂时用的是 4.01 最新版本; 描述:解决 .net core webapi 上传文件使用的是 IFormFile,在Swagger 接口描叙的时候很不友好,为解决接口文档的友好描叙; 实际效果: 解决办法: 步骤1 增加 S ......

前提:

  需要nuget   swashbuckle.aspnetcore 我暂时用的是  4.01 最新版本;

 

 描述:解决 .net core webapi 上传文件使用的是 iformfile,在swagger 接口描叙的时候很不友好,为解决接口文档的友好描叙;

 

实际效果:

.net core webapi 文件上传在 Swagger 文档中的有好提示处理

 

解决办法:

  步骤1 增加 swagger 的选项过滤器 swaggerfileuploadfilter.cs

/// <summary>
    /// swagger 上传文件过滤器
    /// </summary>
    public class swaggerfileuploadfilter : ioperationfilter
    {
        /// <summary>
        /// 应用过滤器
        /// </summary>
        /// <param name="operation"></param>
        /// <param name="context"></param>
        public void apply(operation operation, operationfiltercontext context)
        {
          #region 文件上传处理
            if (!context.apidescription.httpmethod.equals("post", stringcomparison.ordinalignorecase) &&
                !context.apidescription.httpmethod.equals("put", stringcomparison.ordinalignorecase))
            {
                return;
            }

            var fileparameters = context.apidescription.actiondescriptor.parameters.where(n => n.parametertype == typeof(iformfile)).tolist();
            if (fileparameters.count < 0)
            {
                return;
            }

            operation.consumes.add("multipart/form-data");
            foreach (var fileparameter in fileparameters)
            {
                var parameter = operation.parameters.single(n => n.name == fileparameter.name);
                operation.parameters.remove(parameter);
                operation.parameters.add(new nonbodyparameter
                {
                    name = parameter.name,
                    in = "formdata",
                    description = parameter.description,
                    required = parameter.required,
                    type = "file"
                });
            }
             #endregion
        }
    }

   步骤2 对 startup.cs swagger 配置项进行过滤

            services.addswaggergen(options =>
            {
                ..........
                options.operationfilter<swaggerfileuploadfilter>();
            });