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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:42:40