.NET Core Web API使用Swagger上传xlsx文件报Unsupported Media Type错误
问题根因
- 全局配置
[Consumes("application/json")]会强制所有接口仅接收application/json类型的请求,而文件上传请求的Content-Type是multipart/form-data,匹配失败就会返回Unsupported Media Type错误,你遇到的报错如下:
- 移除全局配置后Swagger仍无法正常显示上传控件,是因为Swagger未正确识别接口的文件接收参数,或者你之前的全局Consumes还残留了局部配置,异常界面如下:


解决方案
步骤1:移除全局[Consumes("application/json")]配置
不要用全局强制Content-Type的方式解决Swagger授权问题,该方式兼容性极差,会影响所有非JSON接口的正常使用。
步骤2:给文件上传接口单独配置接收类型
上传接口需要显式声明支持multipart/form-data,参数用IFormFile接收文件,示例代码:
[ApiController] [Route("api/[controller]")] public class FileController : ControllerBase { [HttpPost("upload-excel")] [Consumes("multipart/form-data")] // 仅当前接口接收表单数据 public async Task<IActionResult> UploadExcel([FromForm] IFormFile excelFile) { // 校验文件格式 if (excelFile == null || excelFile.Length == 0) return BadRequest("请上传有效文件"); if (Path.GetExtension(excelFile.FileName).ToLower() != ".xlsx") return BadRequest("仅支持.xlsx格式的Excel文件"); // 你的Excel解析、业务处理逻辑 using var stream = excelFile.OpenReadStream(); // 可配合EPPlus/NPOI等组件解析stream内容 return Ok("上传解析完成"); } }
步骤3:正确修复Swagger授权报错
原来的授权报错不要用全局Consumes处理,在Swagger服务注册时配置正确的安全规则即可,.NET 6+的Program.cs配置示例:
// 注册Swagger服务 builder.Services.AddSwaggerGen(opt => { opt.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" }); // 配置JWT授权(如果是Cookie/ApiKey等其他授权方式可对应调整) opt.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { In = ParameterLocation.Header, Description = "请输入JWT令牌,格式:Bearer {你的token}", Name = "Authorization", Type = SecuritySchemeType.Http, BearerFormat = "JWT", Scheme = "Bearer" }); opt.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, Array.Empty<string>() } }); });
步骤4:验证效果
配置完成后重启项目,Swagger的上传接口会自动显示文件选择控件,上传时Content-Type自动为multipart/form-data,不会再报类型不支持错误,同时Swagger的授权功能也正常可用。
内容的提问来源于stack exchange,提问作者wacepar786
相关产品推荐
相关产品推荐

