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

ASP.NET Core POST请求返回204无内容及参数接收为null问题求助

解决ASP.NET Core API POST请求返回null及204 No Content的问题

兄弟,我来帮你捋清楚问题根源,再给你几个靠谱的解决方案:

问题出在哪?

你用[FromBody]string json接收请求体,但ASP.NET Core的模型绑定有个规则:当你指定接收string类型时,它期望请求体是被双引号包裹的原始JSON字符串,而不是结构化的JSON对象。你现在传的是一个嵌套的JSON对象,模型绑定没法把它直接转成string,所以json参数就变成了null。当API返回null时,ASP.NET Core会自动返回HTTP 204 No Content状态码,这就是你遇到的现象。

解决方案

根据你的需求,分两种场景给出方案:

场景1:确实要把整个JSON作为字符串返回

有两种实现方式:

  • 方式一:调整Postman的请求体格式
    把你原来的JSON对象用双引号包裹,同时转义内部的所有双引号,示例如下:

    "{ \"car\": { \"licenseplate\": \"XX-XXX-X\", \"make\": \"Audi\", \"model\": \"A7\", \"year\": 2017, \"fueltype\": 1, \"available\": true } }"
    

    这样ASP.NET Core就能识别这是一个字符串,正确绑定到json参数上。

  • 方式二:直接读取原始请求流
    放弃[FromBody]绑定,直接从请求流里读取原始内容,代码改成这样:

    [HttpPost]
    public async Task<string> Post()
    {
        using var streamReader = new StreamReader(Request.Body);
        return await streamReader.ReadToEndAsync();
    }
    

    这种方式不管你传的是JSON对象还是字符串,都会原封不动返回,灵活性更高。

场景2:推荐做法——用实体类接收结构化JSON

这才是ASP.NET Core API的标准用法,更易维护和扩展:

  1. 先定义和你的JSON结构匹配的实体类:
    public class CarRequest
    {
        public CarDetails Car { get; set; }
    }
    
    public class CarDetails
    {
        public string LicensePlate { get; set; }
        public string Make { get; set; }
        public string Model { get; set; }
        public int Year { get; set; }
        public int FuelType { get; set; }
        public bool Available { get; set; }
    }
    
  2. 修改API方法:
    [HttpPost]
    public CarRequest Post([FromBody]CarRequest request)
    {
        // 这里可以直接操作request.Car的各个属性,做业务逻辑
        return request;
    }
    
  3. 最后确认Postman的请求头里Content-Type设置为application/json(这个是模型绑定的必要前提),请求体保持你原来的JSON内容即可。

这样修改后,API会正确接收并返回结构化的JSON,完全符合REST API的设计规范。

内容的提问来源于stack exchange,提问作者Ramon Brokking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:17:42