如何将文件中的其他参数从 Angular 传递给 ASP.NET Core 控制器?
Posted
技术标签:
【中文标题】如何将文件中的其他参数从 Angular 传递给 ASP.NET Core 控制器?【英文标题】:How to pass other parameter with file to ASP.NET Core controller from Angular? 【发布时间】:2021-08-19 01:15:57 【问题描述】:我有一个问题,我需要将模型作为第一个参数传递,作为第二个参数,我需要传递一个文件
将文件添加到表单:
const formDate = new FormData();
formDate.append("File", this.file);
从角度发送数据:
this.dataService.createRestaurant(this.restaurant, formDate)
.subscribe((data: Restaurant) => this.loadProducts(data))
数据发送服务:
createRestaurant(model: Restaurant, form: FormData)
const headers = new HttpHeaders().append("Content-Disposition", "multipart/form-data")
return this.http.post(this.url, model, form, headers: headers);
Asp.net 核心中的控制器:
public IActionResult Post(Restaurant restaurant, IFormFile File)
code...
我试了两天解决这个问题,模型传输正常,但是文件总是为空
【问题讨论】:
【参考方案1】:尝试将您的操作更改为:
public IActionResult Post(RestaurantViewModel viewModel)
code...
通过创建 ViewModel
public RestaurantViewModel
public Restaurant restaurant get; set;
public IFormFile File get; set;
【讨论】:
我已经尝试过了,我尝试了很多东西,但没有成功。 您是否尝试添加 [FromBody] 例如? 是的,我试过 [FromBody] 和 [FromForm] 我不知道餐厅是什么,但您是否也尝试将其附加到表单中? 我不确定你是否需要明确添加 const headers = new HttpHeaders().append("Content-Disposition", "multipart/form-data")【参考方案2】:这就是您将数据塑造成表格的方式
const formDate = new FormData();
formDate.append("restaurant", JSON.stringify(this.restaurant));
formDate.append("file", this.file[0], this.file[0].name);
“this.restaurant”与 Asp.Net Core 中的数据模型完全相同
在这个问题中接受 json 数据: ASP.NET Core and formdata binding with file and json property
【讨论】:
以上是关于如何将文件中的其他参数从 Angular 传递给 ASP.NET Core 控制器?的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2 中将数据从组件传递给其他组件的技术有啥区别?
如何使用 Angular 中的依赖注入将属性指令实例传递给嵌套组件