如何解决ASP.NET Core Web API接收Angular form-data的媒体类型错误?
针对你遇到的"This resource does not support the 'multipart/form-data' media type of the request entity"错误,可按以下步骤排查解决:
确认请求路径与路由完全匹配
你的接口路由是api/CartaPorte/sendFormData,Postman请求的URL必须严格对应,比如https://localhost:xxxx/api/CartaPorte/sendFormData,检查是否存在拼写错误、大小写不一致(ASP.NET Core路由默认不区分大小写,但建议保持一致)。确保Postman请求自动设置正确的Content-Type
在Postman中选择form-data格式后,不要手动修改请求头的Content-Type,Postman会自动生成包含边界的multipart/form-data; boundary=xxxx头,手动修改可能导致格式错误。验证项目基础配置支持multipart请求
确保Program.cs(.NET 6+)或Startup.cs(.NET 5及更早)中正确配置了控制器服务,默认配置已支持multipart/form-data:var builder = WebApplication.CreateBuilder(args); // 添加控制器服务,默认包含multipart请求处理支持 builder.Services.AddControllers(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); // 映射控制器路由 app.MapControllers(); app.Run();修正接口代码的冗余与逻辑问题
你的接口中强制转换IActionResult是多余的,且无论逻辑是否成功都返回BadRequest,可优化代码如下:[HttpPost("api/CartaPorte/sendFormData")] public IActionResult SendPDF([FromForm] FormDataModel formData) { try { if (formData.PDFContent == null || formData.PDFContent.Length == 0) { return BadRequest("未上传有效文件"); } var ruta = formData.Ruta; var archivo = formData.PDFContent; // 这里添加文件处理、保存等业务逻辑 return Ok("表单数据接收成功"); } catch (Exception ex) { return BadRequest($"处理失败:{ex.Message}"); } }匹配Postman参数名与模型属性
在Postman的form-data表单中,键名必须与FormDataModel的属性名一致:- 文本参数键名填
Ruta,对应输入字符串值 - 文件参数键名填
PDFContent,类型选择File并上传PDF文件
- 文本参数键名填
排查全局拦截组件
如果项目中存在自定义中间件、过滤器或授权策略,检查是否有拦截multipart/form-data类型请求的逻辑,确保该媒体类型被允许通过。
内容的提问来源于stack exchange,提问作者Miguel Silva Rubio

