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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:40:07