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

ASP.NET Core 2.0/React项目POST请求体数据为空问题求助

解决ASP.NET Core 2.0 POST请求中[FromBody] string参数为null的问题

我之前踩过这个一模一样的坑,其实问题出在ASP.NET Core的模型绑定规则和你发送的请求体格式不匹配,咱们一步步来搞定:

问题根源

当你在控制器方法里用[FromBody] string value时,ASP.NET Core的JSON模型绑定器期望的请求体是纯JSON字符串(比如"2"),但你现在客户端传的是一个JSON对象{"value": "2"}——绑定器没法把一个对象转换成string类型,自然就返回null了。而换成dynamic能拿到JObject,是因为dynamic可以兼容任意JSON结构,属于“灵活但不安全”的写法。

两种解决方案

方案一:调整客户端请求体为纯字符串

直接把要传递的内容改成字符串,而不是包裹在对象里:

private sendUpdates() {
    var payload = "2"; // 直接传要发送的字符串值
    fetch('api/Parts/5', {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(payload) // 序列化后就是符合要求的"2"
    });
}

方案二:服务端定义DTO类接收对象

如果不想改动客户端的请求格式,那就创建一个和请求体结构匹配的DTO(数据传输对象)类:

// 新增一个简单的DTO类
public class PartValueDto
{
    public string Value { get; set; }
}

然后修改控制器的Post方法,用这个DTO来接收参数:

[Produces("application/json")]
[Route("api/Parts")]
public class PartsController : Controller
{
    [HttpPost("{id}")]
    public void Post(int id, [FromBody]PartValueDto valueDto)
    {
        // 这里就能正常拿到valueDto.Value = "2"了
        string actualValue = valueDto.Value;
    }
}

额外提示

如果只是临时调试用dynamic没问题,但实际项目里更推荐用DTO类,这样既能保证类型安全,也更符合ASP.NET Core的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:15:26