You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中Swashbuckle多文件上传IOperationFilter配置报错求助

解决.NET 6 + Swashbuckle.AspNetCore 6.2.3中文件上传IOperationFilter的兼容性问题

在Swashbuckle.AspNetCore 6.x版本中,OpenAPI.NET类库做了破坏性变更,旧代码里依赖的Consumes集合和OpenApiParameter.Type属性已被移除,需按照OpenAPI 3.0规范调整代码,才能在Swagger页面生成正确的文件上传框。

修改后的完整FileUploadOperationFilter代码如下:

using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Swashbuckle.AspNetCore.SwaggerGen;
using Microsoft.OpenApi.Models;

namespace BK.DocumentService.Api.Swagger
{
    public class FileUploadOperationFilter : IOperationFilter
    {
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (operation.OperationId == "xxx")
            {
                // 替换原Consumes,用RequestBody定义multipart/form-data请求体
                operation.RequestBody = new OpenApiRequestBody
                {
                    Content = new Dictionary<string, OpenApiMediaType>
                    {
                        ["multipart/form-data"] = new OpenApiMediaType
                        {
                            Schema = new OpenApiSchema
                            {
                                Type = "object",
                                Properties = new Dictionary<string, OpenApiSchema>
                                {
                                    ["file"] = new OpenApiSchema
                                    {
                                        Type = "string",
                                        Format = "binary" // 指定为二进制文件类型
                                    }
                                },
                                Required = new HashSet<string> { "file" }
                            }
                        }
                    }
                };
            }
        }
    }
}

关键变更说明:

  • 替换Consumes:OpenAPI 3.0不再使用Consumes,而是通过RequestBody.Content指定请求媒体类型,这里定义multipart/form-data类型的请求体,并在Schema中声明文件字段。
  • 替换Type = "file":OpenApiParameter.Type已被移除,需通过Schema属性定义类型,设置Type = "string"和Format = "binary"来标识这是一个文件参数。
  • 推荐使用RequestBody:OpenAPI 3.0规范中,文件上传更推荐通过RequestBody定义,而非Parameters,这样Swagger UI会自动生成文件上传框。

注册过滤器

在Program.cs中配置SwaggerGen时,注册这个过滤器:

builder.Services.AddSwaggerGen(c =>
{
    // 其他Swagger配置...
    c.OperationFilter<FileUploadOperationFilter>();
});

内容的提问来源于stack exchange,提问作者MikeJ82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:45:32