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

如何通过FormUrlEncodedContent传递POST接口的List<Employee>参数?

如何正确通过FormUrlEncodedContent传递Employee列表参数?

你现在的问题在于直接把List<Employee>调用ToString()塞到表单里——这只会返回类型的字符串表示(比如System.Collections.Generic.List1[YourNamespace.Employee]`),后端根本没法把它解析成实际的员工列表。

要解决这个问题,有两种常用的方式,取决于你是否愿意修改后端接口:

方法一:使用索引式表单键(无需修改后端)

ASP.NET Core的模型绑定原生支持带索引的表单字段命名,能自动把这些键值对映射回List<Employee>对象。你需要遍历员工列表,逐个添加对应的字段:

var values = new Dictionary<string, string>
{
    {"Id", myDetails.Id.ToString()},
    {"LocationId", myDetails.LocationId.ToString()},
    {"Status", myDetails.Status.ToString()}
};

// 遍历每个员工,按索引生成表单键
for (int i = 0; i < myDetails.Employee.Count; i++)
{
    var currentEmp = myDetails.Employee[i];
    
    // 添加员工ID
    values.Add($"Employee[{i}].EmployeeId", currentEmp.EmployeeId.ToString());
    
    // 处理EmployeeName:如果Name类有具体属性(比如FirstName/LastName),就这么写
    values.Add($"Employee[{i}].EmployeeName.FirstName", currentEmp.EmployeeName.FirstName);
    values.Add($"Employee[{i}].EmployeeName.LastName", currentEmp.EmployeeName.LastName);
    
    // 如果Name是一个可直接转字符串的类型(比如自定义的字符串包装类),可以简化为:
    // values.Add($"Employee[{i}].EmployeeName", currentEmp.EmployeeName.ToString());
}

// 构建表单内容
var content = new FormUrlEncodedContent(values);

这样提交后,后端的[FromBody]MyDetails模型绑定会自动识别这些带索引的字段,把它们组装成完整的List<Employee>。

方法二:序列化为JSON字符串(需后端配合修改)

如果不想遍历列表,你可以把员工序列化为JSON字符串,作为单个表单参数传递,但这需要后端调整参数的绑定方式:

前端代码:

using System.Text.Json;

var values = new Dictionary<string, string>
{
    {"Id", myDetails.Id.ToString()},
    {"LocationId", myDetails.LocationId.ToString()},
    {"Status", myDetails.Status.ToString()},
    // 把员工列表序列化为JSON字符串
    {"Employee", JsonSerializer.Serialize(myDetails.Employee)}
};

var content = new FormUrlEncodedContent(values);

后端代码调整:

原来的[FromBody]绑定是针对JSON请求体的,现在用表单提交的话,需要改成[FromForm],并手动反序列化员工列表:

[HttpPost]
public IActionResult SaveData([FromForm] int Id, [FromForm] int LocationId, [FromForm] bool Status, [FromForm] string Employee)
{
    // 把JSON字符串反序列化为员工列表
    var employeeList = JsonSerializer.Deserialize<List<Employee>>(Employee);
    
    // 组装成MyDetails对象进行后续处理
    var myDetails = new MyDetails
    {
        Id = Id,
        LocationId = LocationId,
        Status = Status,
        Employee = employeeList
    };
    
    // ...你的业务逻辑
}

总结

优先推荐方法一,因为它符合标准的表单提交规范,不需要修改后端原有的接口定义,模型绑定也更省心。方法二更适合快速临时处理,但需要后端配合调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:33:34