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

ASP.NET中如何对含子List的请求进行FormUrlEncode编码?

表单URL编码处理嵌套List的方法

表单URL编码本身是扁平的键值对结构,没法直接传递嵌套的列表类型,得把列表里的每个元素拆成带索引路径的键值对,让后端的模型绑定能正确识别并组装成List<KeyValuePair<string, string>>。

核心规则(以ASP.NET Core为例)

对于ABCRequest2里的Metadata属性,每个键值对需要拆成两个表单项:

  • 键格式:Metadata[索引].Key,对应KVP的Key值
  • 键格式:Metadata[索引].Value,对应KVP的Value值

具体代码实现

假设你的请求模型和Metadata数据如下:

public class ABCRequest2
{
    public string Title { get; set; }
    public List<KeyValuePair<string, string>> Metadata { get; set; }
}

// 要传递的Metadata数据
var metadataList = new List<KeyValuePair<string, string>>
{
    new("DeviceId", "abc123"),
    new("OperationType", "Create")
};

构造表单数据并发送请求的代码:

// 初始化主表单数据
var formItems = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("Title", "测试请求")
};

// 遍历Metadata,拆分成符合规则的表单项
for (int i = 0; i < metadataList.Count; i++)
{
    formItems.Add(new($"Metadata[{i}].Key", metadataList[i].Key));
    formItems.Add(new($"Metadata[{i}].Value", metadataList[i].Value));
}

// 创建表单编码内容
var formContent = new FormUrlEncodedContent(formItems);

// 发送POST请求
using var httpClient = new HttpClient();
var response = await httpClient.PostAsync("https://your-api-url/DoSomething2Async", formContent);

可选简化方式(兼容性稍差)

如果后端框架支持直接用KVP的Key作为索引(比如部分PHP、Java框架),也可以用这种更简洁的格式:

foreach (var kvp in metadataList)
{
    formItems.Add(new($"Metadata[{kvp.Key}]", kvp.Value));
}

但这种方式不适用于ASP.NET Core的默认模型绑定,优先推荐第一种带数字索引的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:52:33