ASP.NET Core 8 Web API POST/PUT/PATCH请求体接收为null问题求助
问题解决:ASP.NET Core 8 Web API无法接收POST请求体(string参数返回400)
根因分析
当接口使用[FromBody] string dataAsString时,ASP.NET Core期望请求体是纯JSON字符串(被双引号包裹的内容),但你的React客户端发送的是JSON对象{"name": "my name"},类型不匹配导致模型绑定失败,返回400错误并提示必填字段缺失。而dynamic类型会自动适配JSON对象结构,所以能正常接收。
解决方案
方案1:修改客户端请求,发送纯字符串
若确实需要服务器接收字符串参数,客户端需将内容包装为JSON字符串格式:
await fetch("urlgoeshere.com/simplesubmit", { method: "POST", headers: { "Content-Type": "application/json" }, // 发送纯字符串,外层JSON.stringify会生成带引号的合法JSON字符串 body: JSON.stringify("my name") });
如果要传递对象的字符串表示:
const obj = { name: "my name" }; await fetch("urlgoeshere.com/simplesubmit", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(JSON.stringify(obj)) });
方案2:定义强类型模型接收(推荐)
这是REST API的标准实践,定义匹配请求结构的类:
// 定义请求模型类 public class SubmitRequest { public string Name { get; set; } } // 修改接口参数类型 [HttpPost] [Route("simplesubmit")] public void SimpleSubmit([FromBody] SubmitRequest request) { // 直接通过request.Name获取数据 }
客户端保持原请求不变(发送JSON对象),框架会自动完成模型绑定。
方案3:用JsonElement/JObject接收任意JSON对象
若不想定义模型类,可使用JsonElement(System.Text.Json内置)或JObject(Newtonsoft.Json)接收:
// 使用System.Text.Json的JsonElement [HttpPost] [Route("simplesubmit")] public void SimpleSubmit([FromBody] JsonElement requestData) { string name = requestData.GetProperty("name").GetString(); } // 或使用Newtonsoft.Json的JObject(需先安装Newtonsoft.Json NuGet包) [HttpPost] [Route("simplesubmit")] public void SimpleSubmit([FromBody] JObject requestData) { string name = requestData["name"]?.ToString(); }
客户端请求无需修改,即可正常接收JSON对象。
内容的提问来源于stack exchange,提问作者josephwj
相关产品推荐
相关产品推荐

