angular - 使用 Angular 在 .NET Core 中保存 FormData
问题描述
我正在尝试使用 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,我设置错了吗?
解决方案
尝试使用 Angular 7 保存表单,它包含文件和常规数据。
要将formdata
对象从 Angular 前端发布到 API 后端,您可以参考以下工作示例。
saveCitaBeneficio(cita: Cita) {
const formData = new FormData();
for (var prop in cita) {
formData.append(prop, cita[prop]);
}
return this.http.post(
`https://xxx/api/BeneficiosOnline`,
formData
);
}
接口 Cita
interface Cita {
correoElectronico: string;
img?: File;
}
使用测试数据调用函数
this.saveCitaBeneficio({
correoElectronico: 'test@test.com',
img: this.fileToUpload
}).subscribe(() => {
console.log('Success!');
});
型号及作用方法
public class CitaWebDto
{
public string CorreoElectronico { get; set; }
public IFormFile Img { get; set; }
}
public async Task<IActionResult> Post([FromForm] CitaWebDto cita)
{
//...
测试结果
推荐阅读
- javascript - 如何使用 nodejs 读取 worldedit .schem 文件
- database - 无法在 Synapse Studio 中删除无服务器数据库
- visual-c++ - 基于 WebView2 的 ActiveX 控件和拦截 WM_LBUTTONDBLCLK
- python - 如何重新排列输入的拆分
- swift - 显示相同项目的动态列表,即使填充的列表都是唯一项目
- java - 接受许可时出错 - Android Studio
- javascript - 为什么带有等待的异步请求不等待响应数据?
- node.js - 如何在上传后立即接收 Cloudinary 图像 URL(React JS 和 Node Js)?
- reactjs - React、Jest 和测试库:TypeError:使用 findBy(例如 findByAltText)时无法读取 null 的属性“createEvent”
- javascript - Ngrx Effect 中的 MergeMap 导致类型错误