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
相关产品推荐
相关产品推荐

