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

VB.NET中Ajax与IHttpActionResult向Web API提交数组失败问题

问题排查与解决方案

我帮你分析下这个问题,核心是参数绑定不匹配加上Ajax请求格式配置错误,导致VB.NET Web API无法正确解析传入的数组,所以属性值都变成了Decimal类型的默认值0。结合Chrome F12的排查步骤,咱们一步步解决:

1. 先用Chrome F12确认请求的问题点

打开Chrome开发者工具(F12),切换到Network标签,发送请求后找到对应的POST请求,检查两个关键项:

  • Headers:看Content-Type是不是application/json——如果是默认的application/x-www-form-urlencoded,Web API没法正确解析JSON数组
  • Payload:查看实际发送的数据格式,你当前的data: { '': latlon }会生成非标准的表单格式,不是服务器能识别的JSON数组

2. 修正Ajax请求的配置

你当前的Ajax既没指定正确的contentType,数据格式也不对,而且对象键名和VB类的属性名不匹配,这是最关键的问题!修改后的代码如下:

var latlon = [ { latIn: 45, lonIn: -120 }, { latIn: 55, lonIn: -112 } ]; // 键名要和VB类的属性完全一致
alert(JSON.stringify(latlon))
$.ajax({
    url: uri,
    method: "POST",
    contentType: "application/json", // 必须指定这个,告诉服务器请求体是JSON格式
    data: JSON.stringify(latlon) // 把数组序列化为标准JSON字符串
}).done(function (result) {
    alert(result)
}).fail(function (xhr) {
    alert(xhr.responseText);
});

重点注意:Ajax里的对象键名必须和VB类的latIn、lonIn完全对应,之前你写的lat、lon和类属性名不匹配,服务器没法映射到正确的属性上!

3. 优化VB.NET Web API控制器(可选但推荐)

虽然当前控制器代码本身能工作,但加上FromBody特性可以明确指定从请求体获取数据,避免歧义,同时增加空值判断:

<HttpPost>
Public Function Post(<FromBody> ByVal latlons As List(Of Latlon)) As IHttpActionResult
    If latlons Is Nothing OrElse latlons.Count = 0 Then
        Return Content(HttpStatusCode.BadRequest, "No valid data received")
    End If
    Dim lat1 = latlons(0).latIn
    Return Content(HttpStatusCode.OK, lat1) ' 这里建议返回OK状态,BadRequest是错误状态,容易混淆结果
End Function

4. 用Chrome F12验证修复效果

修改后重新发送请求,回到Network标签检查:

  • Headers里的Content-Type应该显示为application/json; charset=utf-8
  • Payload里应该是标准的JSON数组:[{"latIn":45,"lonIn":-120},{"latIn":55,"lonIn":-112}]
  • 响应应该返回45,而不是之前的0

这样调整后,VB.NET Web API就能正确解析传入的数组,属性值也不会是默认的0了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:47:26