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

