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

使用Fetch上传文件到ASP.NET Core Web API的参数问题

问题原因及解决方法

核心问题:参数名称不匹配

ASP.NET Core的模型绑定是根据参数名称与FormData中的键名匹配来赋值的:

  • 前端你用formData.append("abcd", blob, "a.mp3"),把文件的键设为了abcd
  • 后端方法参数名是files0,两者名称不一致,导致模型绑定无法找到对应数据,所以files0长度为0
  • 而Request.Form.Files是直接读取整个请求表单中的所有文件集合,不依赖参数名称匹配,所以能拿到上传的文件

两种解决办法

方法1:修改后端参数名,与前端键名一致

如果只传单个文件,直接把参数名改成abcd,用IFormFile类型即可:

[HttpPost]
public async Task<IActionResult> OnPostUploadAsync(IFormFile abcd)
{
    var size = abcd.Length;
    return Ok(new { count = 1, size });
}

如果需要支持多文件上传,就用List<IFormFile>,同时前端多次append同一个键名:

// 前端多文件上传示例
formData.append("abcd", blob1, "1.mp3");
formData.append("abcd", blob2, "2.mp3");

后端对应代码:

public async Task<IActionResult> OnPostUploadAsync(List<IFormFile> abcd)
{
    var size = abcd.Sum(f => f.Length);
    return Ok(new { count = abcd.Count, size });
}

方法2:修改前端FormData的键名,与后端参数名一致

把前端的键名改成files0:

formData.append("files0", blob, "a.mp3");

这样后端的List<IFormFile> files0就能正确绑定到上传的文件了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:50:20