如何在.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
相关产品推荐
相关产品推荐

