ASP.NET Core Web API POST请求失效问题排查
问题诊断与解决方案
问题不在launchsettings.json文件中,核心错误是前端请求的数据格式与后端API的参数绑定逻辑不匹配,导致ASP.NET Core无法正确解析请求内容,进而返回错误。
具体原因分析
后端控制器的Calculate方法定义了string input参数,但前端发送的是JSON格式对象{ numbers: "xxx" },且存在两个关键不匹配:
- 后端参数未标注
[FromBody]特性,ASP.NET Core默认不会从请求体中读取普通字符串参数; - 前端JSON的键名是
numbers,与后端参数名input不一致,无法自动映射。
两种解决方式
方式一:调整前端请求,直接发送字符串
修改前端fetch请求,将输入的数字字符串直接作为请求体发送,而非包裹在JSON对象中:
const response = await fetch("http://localhost:44313/api/TextCalculator", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(numbers), // 直接传递字符串,而非对象 });
同时给后端参数添加[FromBody]特性,明确指定从请求体读取数据:
[HttpPost] public string Calculate([FromBody] string input) { return new TextCalculator().Add(input); }
方式二:调整后端参数,匹配前端JSON结构
创建一个与前端请求结构对应的DTO类,让ASP.NET Core自动映射JSON内容:
public class CalculatorRequest { public string Numbers { get; set; } }
修改控制器方法,接收这个DTO实例:
[HttpPost] public string Calculate([FromBody] CalculatorRequest request) { return new TextCalculator().Add(request.Numbers); }
这种方式下前端代码无需修改,即可正常完成请求。
额外注意事项
如果API是通过APIProject配置项启动(而非IIS Express),前端请求的端口要对应launchsettings.json中applicationUrl配置的https://localhost:5001或http://localhost:5000,避免因端口不匹配导致连接错误。
内容的提问来源于stack exchange,提问作者ManasievaE
相关产品推荐
相关产品推荐

