【发布时间】:2021-05-21 21:14:49
【问题描述】:
我正在尝试使用 Angular 7 保存一个表单,它包含文件和常规数据。
我正在使用它来发送请求
saveCitaBeneficio(cita: Cita) {
const formData = new FormData();
for (var prop in cita) {
formData.append(prop, cita[prop]);
}
let headers = new HttpHeaders().append("Content-Type", "multipart/form-data");
return this.http.post(`/api/BeneficiosOnline`, formData, { headers: headers });
}
这就是我要调用的端点
[HttpPost]
[EnableCors()]
public async Task<IActionResult> Post([FromForm]CitaWebDto cita)
{
if (ModelState.IsValid)
{
var result = await _helper.SaveCitaBeneficioOnline(cita);
return StatusCode(201, result);
}
return BadRequest(cita);
}
当使用 Postman 时它工作得很好,但是发送这个表单数据我在后端看到的只是一个空对象,在网络选项卡上我可以看到数据实际上正在发送:
------WebKitFormBoundarybalyvAXgvHxSi7VH
Content-Disposition: form-data; name="correoElectronico"
test@test.com
我也尝试过设置 Content-Disposition 标头,我尝试过不指定任何标头,我尝试过不添加 [FromForm] 装饰器,但我似乎什么也得不到,只有一个空对象.
编辑:
我现在注意到,即使我在发送前更改了 Content-Type 标头,Chrome 网络仍然显示为 application/json,我是不是设置错了?
【问题讨论】:
-
起初,我看到一个打印错误 - “mulipart/form-data”而不是“multipart/form-data”。
-
@kogonidze 我没有注意到,但是在修复它之后它仍然无法正常工作,我注意到现在查看 Chrome 中的网络选项卡,内容类型仍然是 application/json,甚至设置后
-
只是避免设置标题。它可以根据formdata自动解释。
-
还有一个建议是,accept 也有问题。尝试查看邮递员请求。
-
@dotnetstep 即使我没有设置标题它在网络选项卡中显示为“application/json”,而在后端只是一个空对象
标签: angular asp.net-core multipartform-data