我使用的是Swager3和.NetCore 5.0.0-rc4。我正在尝试使用Swagger上传文件(图像),但它不起作用,因为IOperationFilter甚至Swashbuckle.AspNetCore.Swagger中的apply方法缺少一些属性。例如,在Swager5.0中,NonBodyParameter和消费不存在
有没有人用face来解决同样的问题或试图解决它?
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");
}
}
}发布于 2020-03-05 17:59:01
至于缺少的参数,现在它们被更改为OpenApiParameter和OpenApiOperation。
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
}
};
}
}发布于 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) <=新特性
https://stackoverflow.com/questions/59288658
复制相似问题