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
相关产品推荐
相关产品推荐

