• .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就可以看到:

    结束!

  • 相关阅读:
    Java暑期学习第三十一天日报
    使用dataadapter和dataset更新数据库
    一些很酷的.Net技
    一个阴历阳历互相转化的类(c#农历)
    详细讲解简洁、明晰!数据库设计三大范式应用实例
    WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题解决方案
    CONVERT函数方法大全(经验总结)
    使用C#将字符串转换成十六进制以及其逆转换
    List myList = new List()有关的方法及属性
    C#实现P2P之UDP穿透NAT及其原理讲解11
  • 原文地址:https://www.cnblogs.com/Ivan-Wu/p/11777782.html
Copyright © 2020-2023  润新知