zoukankan      html  css  js  c++  java
  • .Net core3.0 集成swagger5.0上传文件

        .Net core 3.0已经更新了,相信有挺多博主大佬们都更新了如何在.Net core3.0使用swagger,这里就不详细说了。

    我们知道,如果.net core 2.x使用swagger上传文件是需要写个操作过滤器的类。

    public class SwaggerFileUploadFilter : IOperationFilter
        {
            public void Apply(Operation operation, OperationFilterContext context)
            {
                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"
                    });
                }
            }
        }

    需要在startup类中配置:

     这样上传文件的api就有选择文件的按钮了:

     然后升级到.net core 3.0 ,swagger目前4.x版本不支持,只能下5.x的预览版,然后一堆报错。首先配置中的Info 需要改成OpenApiInfo:

      services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new Info { Title = "Web API", Version = "v1" });
                    var xmlPath = Path.Combine(AppContext.BaseDirectory, "swagger.xml");
                    c.IncludeXmlComments(xmlPath);
                    c.OperationFilter<SwaggerFileUploadFilter>();
                });

    改成:

      services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo { Title = "Web API", Version = "v1", Description = "Web API" });
                    var xmlPath = Path.Combine(AppContext.BaseDirectory, "swagger.xml");
                    c.IncludeXmlComments(xmlPath);
                });

    而且swagger 5.0版本不需要手动写过滤器类,也就是

    SwaggerFileUploadFilter

    上文提到的这个类。

    直接正常写api就可以了,不过IFormFile参数一定不要加[FromBody]这个特性。就像这样:

            /// <summary>
            /// 上传文件
            /// </summary>
            /// <param name="formFile">文件</param>
            /// <returns></returns>
            [HttpPost]
            public IActionResult test(IFormFile formFile)
            {
                return Ok("靓仔");
            }

    然后打开swagger就可以看到:

    结束!

  • 相关阅读:
    linux下postgresql的c程序编译问题
    Linux下Sublime Text 2中文显示及中文输入问题[转][ubuntu 10.10]
    linux英文斜体乱码 【ubuntu 10.10】
    dropbox无法访问后国内网盘对比选择
    Linux查看系统信息的一些命令及查看已安装软件包的命令(转)
    linux配置ssh 【ubuntu 10.10】
    error: failed to push some refs【Linux】【Git】
    一些曾经收藏的话
    Linux系统源码安装过程中的prefix选项【转】
    LINUX GBK>UTF8文件编码批量转换脚本[转]
  • 原文地址:https://www.cnblogs.com/Ivan-Wu/p/11777782.html
Copyright © 2011-2022 走看看