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

React前端POST传Int至ASP.NET Core后端始终为空/0且报500错误

问题解决:React前端POST整数到ASP.NET Core后端参数接收异常及500错误

核心原因

前端发送的是包含整数的JSON对象,但后端直接用int类型参数接收(即使加[FromBody])时,ASP.NET Core无法将JSON对象正确绑定到单个值类型参数,导致参数默认值为0(int类型)或null(可空int)。后续传入0调用数据库方法时引发异常,触发HTTP 500错误。

解决方案(二选一即可)

方案1:修改前端,直接发送单个整数作为请求体

无需改动后端,仅调整axios发送的请求体内容,从JSON对象改为单个整数:

const CallNextTextFromChoice = (nextChoiceID) => {
        axios.post('https://localhost:7252/Main/NextTextFromChoice', nextChoiceID, {
            headers: {
                'Content-Type': 'application/json'
            }
        })
            .then(response => {
                const data = response.data;
            })
            .catch(error => {
                console.log(nextChoiceID);
                console.error('Error:', error);
            });
    }

后端保持添加[FromBody]的写法:

[HttpPost]
public IActionResult NextTextFromChoice([FromBody] int nextChoiceID)
{
    var nextText = _dataBaseController.UpdateAllInfoWithChoice(nextChoiceID);

    return Json(nextText);
}

方案2:后端创建DTO类接收JSON对象

无需修改前端,在后端定义一个与前端JSON结构匹配的DTO类,用于接收参数:

// 定义DTO类
public class ChoiceRequest
{
    public int NextChoiceID { get; set; }
}

// 修改接口方法
[HttpPost]
public IActionResult NextTextFromChoice([FromBody] ChoiceRequest request)
{
    // 可选:添加参数校验,提前返回错误避免后续异常
    if (request == null || request.NextChoiceID == 0)
    {
        return BadRequest("无效的选择ID");
    }
    
    var nextText = _dataBaseController.UpdateAllInfoWithChoice(request.NextChoiceID);

    return Json(nextText);
}

额外排查点

HTTP 500错误大概率是参数为0时,_dataBaseController.UpdateAllInfoWithChoice方法内部抛出异常(比如数据库查询无匹配数据、空引用等)。可以在后端方法中添加日志输出,或者启用ASP.NET Core的详细错误日志,定位具体异常原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:51:10