如何通过jQuery POST向ASP.NET Web API传数组?解决后端识别失败问题
解决ASP.NET Web API无法识别JSON请求体中数组参数的问题
你的问题核心在于前端AJAX请求没有正确告知服务器请求体是JSON格式,加上几个小的代码细节问题,导致后端无法解析数组参数。我帮你梳理下解决方案:
前端代码的关键修正点
- 修正JSON拼写:原生JS的JSON对象是大写开头的
JSON.stringify(),不是Json.stringify() - 指定Content-Type:必须告诉服务器请求体是JSON格式,否则ASP.NET Web API会按默认的表单编码解析,识别不了JSON数组
- 可选:统一数据类型:后端期望的是
int[],前端可以直接用数字数组,避免潜在的类型转换问题
修正后的前端代码
var array = [1, 2, 3, 4, 5]; // 直接使用数字数组,若原数据是字符串可转成数字:array.map(Number) var ids = JSON.stringify(array); $.ajax({ type: "POST", url: "/api/result", data: ids, contentType: "application/json; charset=utf-8", // 关键:添加这一行指定请求格式 success: function (data, state) { alert("su..."); } });
后端代码确认
你的后端代码其实是没问题的,[FromBody]特性已经正确指定了从请求体获取参数,只要前端请求格式正确,就能正常接收到ids数组。如果还是有异常,可以确认下Web API的JSON格式化配置是否正常(默认情况下ASP.NET Web API已经配置了JSON媒体类型格式化器)。
为什么之前的代码不行?
jQuery的$.ajax默认的contentType是application/x-www-form-urlencoded; charset=UTF-8,这种情况下服务器会尝试把请求体解析成键值对形式,而不是JSON字符串。即使你传了JSON格式的字符串,服务器也无法识别为数组参数。指定contentType为application/json后,服务器才会用JSON格式化器去解析请求体,匹配到后端的int[]参数。
内容的提问来源于stack exchange,提问作者Dongwei Shi
相关产品推荐
相关产品推荐

