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

Angular上传FormData至.NET Core 3.1 API时文件始终为Null

Angular上传FormData到.NET Core 3.1时IFormFile始终为Null的解决办法

我之前碰到过一个特别闹心的问题:用Angular通过FormData上传图片到.NET Core 3.1后端,API里接收的IFormFile一直是Null,但用Postman测试却完全正常。折腾了好一阵才找到根源,现在把整个过程和解决方法分享出来。

我的相关代码

Angular组件中的上传方法

upload() { 
  let formData = new FormData(); 
  formData.append('upload', this.editedImage); 
  console.log("editedImage: " + this.editedImage); 
  console.log("formdata: " + formData); 
  this.imageService.create(formData).subscribe(response => { 
    let temp = response; 
    console.log(temp); 
  }) 
}

Angular服务的POST请求方法

create(formData: FormData): Observable<any> { 
  console.log("formdata in service: " + formData.get('upload')); 
  return this.http.post<any>(`${this.url}`, formData).pipe( 
    tap(data => console.log('Image verstuurd: ' + data)), 
    catchError(this.handleError) 
  ); 
}

.NET Core后端API代码

[HttpPost] 
async public Task<ActionResult> Save([FromForm]IFormFile file) { 
  // Get reference to blob 
  var uniqueName = $@"{Guid.NewGuid()}-{file.FileName}"; 
  CloudBlockBlob blockBlob = _blobContainer.GetBlockBlobReference(uniqueName); 
  using var ms = new MemoryStream(); 
  file.CopyTo(ms); 
  var stream = ms.ToArray(); 
  await blockBlob.UploadFromByteArrayAsync(stream, 0, stream.Length); 
  return Json(new { name = blockBlob.Name, uri = blockBlob.Uri }); 
}

问题根源与解决办法

其实问题特别简单,就是FormData里的键名和后端IFormFile的参数名称不匹配!我在Angular里给FormData加的键是upload,但后端API的参数名叫file,两者对不上,导致后端没法正确把上传的文件绑定到IFormFile对象上。

解决的时候只需要把两边的名称统一就行,有两种方案可选:

方案1:修改Angular的FormData键名

把组件里的formData.append('upload', this.editedImage)改成:

formData.append('file', this.editedImage);

方案2:修改后端API的参数名称

把后端方法的参数改成:

[FromForm]IFormFile upload

随便选一种改完之后再测试,IFormFile就能正常接收到上传的图片了,亲测有效!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:22:51