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

.NET 7 API无法接收List<IFormFile>的问题求助

解决方案

第一步:修正Vue请求的Content-Type设置

你手动设置了multipart/form-data的Content-Type,这会导致axios无法自动添加请求必需的boundary参数——multipart/form-data格式必须依赖boundary才能被正确解析。直接移除这个手动设置的header即可:

try {
  const formData = new FormData();
  for (const file of files) {
    formData.append("files", file);
  }
  await axios.post(
    "https://localhost:5001/api/Components/AddImages/" + this.selectedComponent.id,
    formData
    // 移除手动设置的Content-Type header
  );
} catch (error) {
  alert(error);
  console.log(error);
}

第二步:修正.NET接口的参数绑定(二选一)

方案A:使用IFormFileCollection接收文件集合

将接口方法的List<IFormFile>参数替换为IFormFileCollection——这是ASP.NET Core内置的多文件上传接收类型,无需额外标记,NSwag也能正确识别:

public async Task<IResult> AddImagesToComponent(ISender sender, int id, IFormFileCollection files)

IFormFileCollection会自动绑定FormData中所有名为files的文件项,和你当前Vue代码中的formData.append("files", file)完全匹配。

方案B:使用DTO类封装文件参数(适合需扩展参数的场景)

如果后续需要添加更多表单参数,或者一定要用List<IFormFile>,可以创建一个DTO类,通过[FromForm]标记整个DTO参数,避免NSwag的解析错误:

  1. 定义DTO类:
public class ComponentImageUploadRequest
{
    // 用Name属性和FormData中的键名保持一致
    [FromForm(Name = "files")]
    public List<IFormFile> Files { get; set; } = new List<IFormFile>();
}
  1. 修改接口方法:
public async Task<IResult> AddImagesToComponent(ISender sender, int id, [FromForm] ComponentImageUploadRequest request)

之后在方法内部通过request.Files获取上传的文件集合即可。

验证

完成上述修改后,无论是Vue前端调用还是Postman测试,都应该能正常接收多文件上传,同时NSwag也不会再抛出解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:52:44