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

Angular传递含对象数组的FormData到.NET Core C# API时Items为空如何解决

解决方案

核心原因

.NET Core 对[FromForm]标记的复杂类型参数做模型绑定时,要求数组类属性的键名必须遵循数组属性名[索引].子属性名的命名规则,不符合规则的键名会导致后端无法解析数组内容。

正确的Angular端构造代码

// 假设你前端已经拿到了要提交的数组、文件、基础参数
const submitItems = [
  { Type: '身份背调', Result: '无异常' },
  { Type: '学历背调', Result: '信息匹配' }
];
const resultPdfFile = /* 你选择的ResultPdf文件对象 */;
const disclosurePdfFile = /* 你选择的DisclosurePdf文件对象 */;
const empId = /* 员工Guid值 */;
const completeDate = new Date();

// 构造FormData
const formData = new FormData();
// 基础参数正常追加
formData.append('EmpId', empId);
formData.append('CompleteDate', completeDate.toISOString());
// 文件正常追加
formData.append('ResultPdf', resultPdfFile);
formData.append('DisclosurePdf', disclosurePdfFile);

// 重点:按索引追加数组每个元素的属性
submitItems.forEach((item, index) => {
  formData.append(`Items[${index}].Type`, item.Type);
  formData.append(`Items[${index}].Result`, item.Result);
});

// 发送请求,不要手动设置Content-Type请求头,让浏览器自动生成带边界值的multipart/form-data头
this.http.post('你的API接口地址', formData).subscribe(res => {
  // 处理响应
});

注意事项

  • 数组索引必须从0开始连续递增,不能出现跳号,否则中断位置之后的元素都会被模型绑定忽略
  • 键名需要和后端类的属性名对应,.NET Core默认不区分键名大小写,Items[0].type和Items[0].Type都可以正常识别
  • 不要将整个数组序列化为JSON字符串后赋值给Items键,这种写法后端无法解析为数组对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:02