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

Ajax传递数组至.NET WebApi Controller始终长度为0,求问题原因

问题分析与解决方案

嗨,我帮你找到了控制器接收不到数组的核心原因——数据格式与请求内容类型不匹配,导致WebAPI的模型绑定无法正确识别数组参数。

为什么会出现这个问题?

你当前的Ajax请求里,data: { id: arr }会被jQuery默认序列化为form-urlencoded格式(比如id=1&id=2&id=3或id[]=1&id[]=2&id[]=3,取决于jQuery版本)。但WebAPI的默认模型绑定规则对POST请求的这种格式并不友好,它无法自动将多个同名参数绑定到int[] id参数上,所以你拿到的数组始终是空的。

推荐解决方法

直接发送JSON格式的数据,并明确指定请求的contentType为application/json,这样WebAPI就能正确解析数组了:

修改后的Ajax代码:

var arr = [1, 2, 3];
$.ajax({ 
    url: "http://localhost:14506/api/Lanche/Montar", 
    type: "POST", 
    data: JSON.stringify({ id: arr }), // 将对象转为标准JSON字符串
    dataType: "json", 
    contentType: "application/json", // 关键:告诉服务器请求体是JSON格式
    // async: false, 建议移除这个配置,同步请求会阻塞浏览器主线程,影响用户体验
    success: function (data) { alert(data); } 
});

控制器方法可以保持原样,或者加上[FromBody]特性让绑定逻辑更明确(可选,但推荐):

public decimal Montar([FromBody] int[] id) {
    if (id != null) { 
        // 业务代码
    }
    return 0;
}

额外提示

  • 尽量避免使用async: false,同步Ajax请求会导致页面假死,严重影响用户体验。
  • 如果坚持要用form-urlencoded格式传递数组,需要修改WebAPI的配置添加自定义模型绑定规则,但这种方式繁琐且不直观,远不如发送JSON简洁可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:02:05