Angular向ASP.NET Core 6 Web API传文件失败:Multipart长度超限
解决Angular上传文件到ASP.NET Core 6 Web API的Multipart长度限制错误
问题分析
你遇到的无法读取请求表单。已超出Multipart主体长度限制16384错误,核心原因是Angular端手动设置了错误的Content-Type头,导致ASP.NET Core无法正确解析Multipart请求,从而触发了默认的极小长度限制(16384字节)。而Swagger能正常工作,是因为它会自动生成正确的请求头和boundary。
解决方案
1. 移除Angular端手动设置的Content-Type头
当使用FormData上传文件时,Angular的HttpClient会自动生成正确的multipart/form-data头,包括动态生成的boundary。手动设置固定boundary会导致请求解析失败。
修改Angular的submit方法:
submit(uploadFileData: any) { // 移除自定义的httpOptions,无需手动设置Content-Type return this.http.post("http://localhost:5357/api/FileUpload/Submit", uploadFileData) .pipe( // Angular 13+的post请求默认返回JSON,无需调用res.json() catchError(this.handleError) ); }
2. 确保API参数名称与FormData的键一致
你的API方法参数是IFormFile formData,但Angular中FormData.append的键是'file',两者不匹配会导致无法绑定文件。需要统一名称:
方案A:修改API方法参数名称
[HttpPost("Submit")] public async Task<IActionResult> Submit(IFormFile file) // 改为与FormData键一致的file { try { // 处理文件逻辑 return Ok(); } catch (Exception ex) { return BadRequest(ex.Message); } }
方案B:修改Angular的FormData键
const formData = new FormData(); formData.append('formData', fileToUpload, fileToUpload.name); // 改为与API参数名一致的formData
3. 确认ASP.NET Core配置有效性
你的Program.cs配置已经设置了正确的上传限制,可补充给API方法添加[RequestSizeLimit]特性,确保覆盖全局配置:
[HttpPost("Submit")] [RequestSizeLimit(50 * 1024 * 1024)] // 明确设置50MB上传限制 public async Task<IActionResult> Submit(IFormFile file) { // ... }
验证修改
完成以上步骤后,重新测试Angular端的文件上传:
- 打开浏览器开发者工具的Network面板,确认请求的
Content-Type是自动生成的动态值(例如multipart/form-data; boundary=----WebKitFormBoundaryxxxxxx) - 确认API能正常接收
IFormFile参数并处理文件
内容的提问来源于stack exchange,提问作者Sravani Yadav
相关产品推荐
相关产品推荐

