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

如何在.NET API控制器的Post方法中接收JSON参数并完成数据操作

解决方案

你现有的参数类型设置本身没有错误,ASP.NET 内置的模型绑定机制支持自动将请求体的JSON反序列化为指定的强类型对象,只需要补充以下配置即可:

1. 给方法参数添加 [FromBody] 特性

该特性明确告知框架从POST请求的Body中读取JSON内容,反序列化为DeviceData对象,修改后的方法签名如下:

[HttpPost]
public ActionResult<DeviceData> InsertData([FromBody] DeviceData deviceData)

如果你的控制器类添加了[ApiController]特性,框架会自动为POST接口的复杂类型参数启用[FromBody]绑定,可省略该特性。

2. 确保DeviceData类定义符合绑定要求

  • 类需要为public修饰
  • 所有需要从JSON映射的属性需要有public的get、set访问器
  • JSON字段名和类属性名大小写默认不敏感,保证名称一致即可

3. Postman请求配置调整

发送请求时需要符合以下要求:

  • 请求方法选择POST,填写正确的接口地址
  • Headers中添加Content-Type字段,值为application/json
  • Body选择raw格式,格式下拉选择JSON,填写和DeviceData结构匹配的JSON内容,示例:
{
    "Id": 1,
    "Latitude": 30.123,
    "Longitude": 120.456,
    "Altitude": 40,
    "Speed": 50,
    "DeviceId": 1001
}

4. 响应返回配置

你现有代码中return Ok(...)传入强类型对象时,ASP.NET 默认会自动将其序列化为JSON格式返回,不需要额外配置,只要你没有修改项目默认的输出格式化器即可正常返回JSON响应。

额外逻辑修正建议

你当前代码中用deviceData.Id查询Devices表的逻辑存在问题:通常DeviceData的Id是该表的自增主键,前端请求时不会传递该值,会导致查询永远返回null触发400。你应该用deviceData.DeviceId查询对应的设备是否存在,修改判断逻辑如下:

var device = deviceContext.Devices.Find(deviceData.DeviceId);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:02