Sam*_*ino 5 c# file-upload swagger asp.net-core .net-core-3.0
我正在使用 .NetCore 3 和 Swagger 5.0.0-rc4。我正在尝试使用 Swagger 上传文件(图像)但它不起作用,因为 IOperationFilter 甚至 Swashbuckle.AspNetCore.Swagger 中的 apply 方法缺少一些属性。例如 NonBodyParameter 和 Consumes 不会在 Swagger 5.0 中退出
有没有人使用面临同样的问题或试图解决它?
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我设法在 Swashbuckle.AspNetCore 6.1.5 中解决了这个问题
Swagger 自动将 IFormFile 识别为multipart/form-data
媒体类型。
您只需删除过滤器类并从控制器中的参数中删除[FromForm]
or属性即可。[FromBody]
void Post([FromForm] IFileForm file)
<= 旧的
void Post(IFileForm file)
<=新的
小智 2
AS 缺少的参数现在这些已更改为 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
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2310 次 |
最近记录: |