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

表单提交至app.MapPost后字段返回数组而非单个值的原因排查

问题原因与解决办法

原因

这是ASP.NET Core里IFormCollection(也就是request.Form的实际类型)的默认设计逻辑:

  • HTTP协议本身允许同一个表单字段名对应多个值(比如复选框组、多选下拉框这类场景),所以框架统一将每个字段的值存储为字符串数组,哪怕实际只提交了一个值。
  • 你看到的[{"key":"test_input","value":["test"]}]就是这种设计的体现,目的是兼容所有可能的表单提交场景。

解决办法

如果确定该字段只会有单个值,可以用以下几种方式获取单值:

  1. 直接取数组第一个元素:
app.MapPost("/posttest", (HttpRequest request) =>
{
    var singleValue = request.Form["test_input"][0];
    return singleValue;
});
  1. 借助Linq的First()方法(需要引入System.Linq命名空间):
using System.Linq;

app.MapPost("/posttest", (HttpRequest request) =>
{
    var singleValue = request.Form["test_input"].First();
    return singleValue;
});
  1. 更推荐的方式:使用模型绑定,让框架自动处理单值映射:
    首先定义对应的数据模型:
public class TestFormModel
{
    public string TestInput { get; set; }
}

然后修改MapPost方法:

app.MapPost("/posttest", (TestFormModel model) =>
{
    return model.TestInput;
});

这种方式不仅代码更简洁,还能自动处理数据验证等逻辑,是ASP.NET Core处理表单提交的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:34:58