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

ASP.NET Core Web应用POST方法始终接收NULL参数问题求助

解决ASP.NET Core POST方法参数为NULL的问题

这个问题我碰到过好几次,核心原因是你传的请求体格式和方法参数的绑定要求不匹配,咱们一步步来解决:

为什么会出现NULL?

当你给string类型参数加上[FromBody]特性时,ASP.NET Core的模型绑定器会期望请求体是纯JSON字符串(也就是被双引号包裹的单个字符串),而你现在传的{"msg": "hello"}是一个JSON对象,两者不匹配,所以绑定失败,参数自然就成了NULL。

解决方案一:修改请求体为纯JSON字符串

如果你就想用string类型接收参数,需要把请求体改成纯字符串格式:

  • 使用curl的话,命令要改成这样:
    curl -X POST -H "Content-Type: application/json" -d '"hello"' localhost:57084/api/values
    
    注意-d后面的内容是"hello",外层用单引号包裹,确保shell不会转义内部的双引号。
  • 使用POSTMAN的话,选择raw->JSON格式,直接在请求体输入:
    "hello"
    

解决方案二:创建实体类接收JSON对象(推荐)

如果你的业务需求就是要传递JSON对象,更规范的做法是定义一个对应的数据模型类:

public class MessageRequest
{
    public string Msg { get; set; }
}

然后修改你的POST方法:

[HttpPost]
public void Post([FromBody]MessageRequest request)
{
    System.Diagnostics.Debug.Print("\n'" + request.Msg + "'\n");
}

这样再发送{"msg": "hello"}的请求,request.Msg就能正确拿到hello的值了。

解决方案三:手动读取请求体内容(特殊场景)

如果坚持要用string参数且不想改请求格式,可以直接读取原始的请求体内容:

[HttpPost]
public async Task Post()
{
    using var streamReader = new StreamReader(Request.Body);
    string requestBody = await streamReader.ReadToEndAsync();
    System.Diagnostics.Debug.Print("\n'" + requestBody + "'\n");
    // 如果你需要解析JSON对象,可以用Newtonsoft.Json或者System.Text.Json来处理
    // var msg = JsonSerializer.Deserialize<MessageRequest>(requestBody).Msg;
}

额外排查点

  • 确保请求头的Content-Type严格设置为application/json,不要写成text/json或者其他格式,ASP.NET Core会根据这个头选择对应的绑定器。
  • POSTMAN中不要选错请求体格式,比如form-data或x-www-form-urlencoded是表单格式,和JSON不兼容,一定要选raw->JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:27:44