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

ASP.NET Core API接收不定数量参数的调用问题

解决ASP.NET Core API处理不定数量参数的问题

首先,你当前遇到的核心问题是前后端数据类型不匹配:前端发送的是包含不确定数量键值对的对象(还额外包裹了一层数组),但后端用string[][](二维字符串数组)接收,ASP.NET Core的模型绑定无法完成这种结构的解析,导致请求失败。

下面给你几个实用的解决方案,按推荐度排序:

方案1:使用Dictionary<string, string>接收(最推荐)

你的参数是典型的「不确定数量的键值对」结构,Dictionary<string, string>完美适配这种场景——既保证类型安全,处理逻辑也简洁直观。

后端API代码修改:

[Produces("application/json")]
[Route("api/Default/")]
public class DefaultController : Controller
{
    [HttpPost]
    public IActionResult Apc([FromBody] Dictionary<string, string> answers)
    {
        // 遍历处理所有问答对
        foreach (var kvp in answers)
        {
            var questionKey = kvp.Key; // 比如"Question1"
            var answerValue = kvp.Value; // 比如"Answer1"
            // 这里编写你的业务逻辑
        }

        return Json(new { success = true, message = "参数处理完成" });
    }
}

前端代码优化(可选)

你当前的代码把对象包裹在了数组里,如果只是传递一组问答对,直接传对象更简洁:

$(function () {
    $('#btn').click(function () {
        var src = { 
            "Question1": "Answer1", 
            "Question2": "Answer2", 
            "Question3": "Answer3"
            // 可按需继续添加更多QuestionN:AnswerN键值对
        };
        $.ajax({
            url: 'api/Default/',
            method: 'POST',
            dataType: 'JSON',
            data: JSON.stringify(src),
            contentType: "application/json",
            success: function (d) {
                alert("Success: " + d.message);
            },
            error: function (e) {
                alert("Error please try again");
            }
        });
    })
})

如果确实需要传递多组问答(比如批量提交),后端只需改成[FromBody] List<Dictionary<string, string>>即可。

方案2:使用dynamic类型接收(快速但类型不安全)

如果不想定义具体类型,可以用dynamic快速接收,但缺点是没有编译时类型检查,容易因参数结构变化引发错误:

[HttpPost]
public IActionResult Apc([FromBody] dynamic answers)
{
    // 通过反射遍历所有属性
    foreach (var prop in answers.GetType().GetProperties())
    {
        var questionKey = prop.Name;
        var answerValue = prop.GetValue(answers, null)?.ToString();
        // 业务逻辑处理
    }
    return Json(new { success = true });
}

额外注意事项

  • 必须给后端参数添加[FromBody]特性,明确告诉ASP.NET Core从请求体中解析JSON数据。
  • 前端一定要设置contentType: "application/json",否则后端无法正确识别请求体的格式。
  • 当参数数量为0时,字典会是空集合,后端可以正常处理,无需额外判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:13:08