如何通过Axios将URL查询参数以整数类型发送POST请求?
问题分析
后端读取到int类型参数为0,核心原因是查询参数解析失败导致parseInt返回NaN,JSON序列化时NaN会被转为null,而.NET中值类型int的默认绑定值为0。另外手动调用JSON.stringify也可能引入不必要的序列化异常。
解决方案
1. 确保查询参数解析为有效整数
解析时添加基数参数和兜底逻辑,避免parseInt返回无效值:
let urlParams = new URLSearchParams(window.location.search); // 传入基数10避免八进制解析问题,用|| 0兜底确保返回合法整数 const numCupon = parseInt(urlParams.get('numerocupon'), 10) || 0; const numReserva = parseInt(urlParams.get('numeroreserva'), 10) || 0; const captchaToken = getCookie('captchaToken'); const requestParams = { NumeroCupon: numCupon, NumeroReserva: numReserva, CaptchaToken: captchaToken };
如果业务不允许传入0,可替换兜底逻辑为前端提示,比如:parseInt(...) || (alert('参数无效'), return)。
2. 让Axios自动处理JSON序列化
Axios默认会将传入的JavaScript对象正确序列化为JSON,无需手动调用JSON.stringify,修改POST请求代码:
axios.post(cuponDataURL, requestParams, { headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' } });
直接传递对象参数,Axios会保证整数类型在序列化后保持数字格式(而非字符串或null)。
3. 可选:添加参数合法性校验
如果业务要求NumeroCupon和NumeroReserva必须存在且有效,可提前拦截:
if (!urlParams.has('numerocupon') || isNaN(numCupon)) { alert('请提供有效的优惠券编号'); return; } if (!urlParams.has('numeroreserva') || isNaN(numReserva)) { alert('请提供有效的预订编号'); return; }
验证方法
发送请求前打印参数确认类型:
console.log(requestParams); // 预期输出:{ NumeroCupon: 117, NumeroReserva: 456, CaptchaToken: "xxx" }
同时在浏览器开发者工具的Network面板查看请求体,确认JSON中的数值为数字类型(不带引号):
{ "NumeroCupon": 117, "NumeroReserva": 456, "CaptchaToken": "xxx" }
内容的提问来源于stack exchange,提问作者chorizete
相关产品推荐
相关产品推荐

