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

ASP.NET MVC GET请求传递2个JSON参数报错该如何解决?

问题排查与解决方案

问题根因

  • GET请求传参逻辑错误:GET请求的参数需要以查询字符串形式拼接在URL后,本身不支持传递JSON格式的请求体。现有代码中对参数做了JSON.stringify()序列化处理,还额外配置了contentType: 'application/json; charset=utf-8',后端Action接收的是两个独立的int类型参数,无法解析JSON格式的传参,直接触发参数校验失败,返回错误响应进入error回调。
  • 潜在异常隐患:后端查询使用Single()方法,当不存在同时匹配itemId、locationId的库存数据时,会直接抛出序列不包含匹配元素的异常,也会触发前端error回调。

修复方案

前端代码修改

删掉JSON序列化逻辑和不必要的contentType配置,直接传递JS对象,$.ajax会自动将对象转为符合GET要求的查询字符串:

function GetItemLocationOnHand(itemId, locationId) {
    var data = {
        itemId: itemId,
        locationId: locationId
    };
    $.ajax({
        async: true,
        type: 'GET',
        dataType: 'JSON',
        data: data,
        url: 'getItemInventory3',
        success: function (data) {
            $("#txtInventory3").val(parseFloat(data).toFixed(2));
        },
        error: function () {
            alert("Error")
        }
    });
}

后端代码优化

替换Single()为FirstOrDefault()做判空处理,避免无匹配数据时抛出异常:

[HttpGet]
public JsonResult GetItemLocationOnHand(int itemId, int locationId)
{
    var itemLocData = objDB.ItemLocationDatas.FirstOrDefault(items => items.ItemId == itemId && items.LocationId == locationId);
    var quantity = itemLocData == null ? 0 : itemLocData.Quantity;
    return Json(quantity, JsonRequestBehavior.AllowGet);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:09