.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的解析错误:
- 定义DTO类:
public class ComponentImageUploadRequest { // 用Name属性和FormData中的键名保持一致 [FromForm(Name = "files")] public List<IFormFile> Files { get; set; } = new List<IFormFile>(); }
- 修改接口方法:
public async Task<IResult> AddImagesToComponent(ISender sender, int id, [FromForm] ComponentImageUploadRequest request)
之后在方法内部通过request.Files获取上传的文件集合即可。
验证
完成上述修改后,无论是Vue前端调用还是Postman测试,都应该能正常接收多文件上传,同时NSwag也不会再抛出解析错误。
内容的提问来源于stack exchange,提问作者stijn
相关产品推荐
相关产品推荐

