首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Swagger 5.0.0-rcX和.Net-Core 3上传文件

使用Swagger 5.0.0-rcX和.Net-Core 3上传文件
EN

Stack Overflow用户
提问于 2019-12-11 23:03:50
回答 2查看 2.5K关注 0票数 5

我使用的是Swager3和.NetCore 5.0.0-rc4。我正在尝试使用Swagger上传文件(图像),但它不起作用,因为IOperationFilter甚至Swashbuckle.AspNetCore.Swagger中的apply方法缺少一些属性。例如,在Swager5.0中,NonBodyParameter和消费不存在

有没有人用face来解决同样的问题或试图解决它?

代码语言:javascript
复制
public class FileOperationFilter : IOperationFilter
    {

        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (operation.OperationId.ToLower() == "apivaluesuploadpost")
            {
                operation.Parameters.Clear();
                operation.Parameters.Add(new **NonBodyParameter**
                {
                    Name = "uploadedFile",
                    In = "formData",
                    Description = "Upload File",
                    Required = true,
                    Type = "file"
                });
                operation.**Consumes**.Add("multipart/form-data");
            }
        }
    }
EN

回答 2

Stack Overflow用户

发布于 2020-03-05 17:59:01

至于缺少的参数,现在它们被更改为OpenApiParameter和OpenApiOperation。

代码语言:javascript
复制
public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (operation.OperationId == "MyOperation")
            {
                operation.Parameters.Clear();
                operation.Parameters.Add(new OpenApiParameter
                {
                    Name = "formFile",
                    In = ParameterLocation.Header,
                    Description = "Upload File",
                    Required = true,
                    Schema= new OpenApiSchema
                    {
                        Type="file",
                        Format="binary"
                    }
                }); 
                var uploadFileMediaType = new OpenApiMediaType()
                {
                    Schema = new OpenApiSchema()
                    {
                        Type = "object",
                        Properties =
                    {
                        ["uploadedFile"] = new OpenApiSchema()
                        {
                            Description = "Upload File",
                            Type = "file",
                            Format = "binary"

                        }
                    },
                        Required = new HashSet<string>()
                    {
                        "uploadedFile"
                    }
                    }
                };
                operation.RequestBody = new OpenApiRequestBody
                {
                    Content =
                {
                    ["multipart/form-data"] = uploadFileMediaType
                }
                };


            }
        }
票数 1
EN

Stack Overflow用户

发布于 2021-08-05 20:43:40

我在Swashbuckle.AspNetCore 6.1.5中设法解决了这个问题

Swagger自动将IFormFile识别为multipart/form-data媒体类型。

您只需删除filter类,并从控制器中的参数中删除[FromForm][FromBody]属性。

void Post([FromForm] IFileForm file) <=旧版

void Post(IFileForm file) <=新特性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59288658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档