如何将 JSON 作为参数传递给控制器 .net api 中的 Post 方法
Posted
技术标签:
【中文标题】如何将 JSON 作为参数传递给控制器 .net api 中的 Post 方法【英文标题】:How to pass JSON as parameter to Post method in controller .net api 【发布时间】:2021-12-10 10:29:34 【问题描述】:首先我想说我是 asp.net 的新手,我现在正在努力学习至少基本的东西,所以不要对我苛刻:) 我的控制器中有一个 post 方法,它必须从 post 请求正文中接收一个 json,然后将信息添加到数据库中。所以方法如下:
[HttpPost]
public ActionResult<DeviceData> InsertData(DeviceData deviceData)
var device = deviceContext.Devices.Find(deviceData.Id);
if (device == null)
return BadRequest(Messages.DeviceNotExist);
deviceContext.DeviceData.Add(new DeviceData
Timestamp = DateTime.Now,
Latitude = deviceData.Latitude,
Longitude = deviceData.Longitude,
Altitude = deviceData.Altitude,
Speed = deviceData.Speed,
DeviceId = deviceData.DeviceId
);
deviceContext.SaveChanges();
return Ok(deviceContext.DeviceData.OrderBy(x=>x.Id).Last());
我最好的猜测是我的参数不正确,因为我试图传递 json 并且方法中的参数是 DeviceData 类型。 所以我的问题是我应该更改和添加什么来获取请求的 json 主体并使用数据执行插入到数据库中,然后返回响应 - json 对象? 如果需要,我会使用 Postman 来处理请求。
【问题讨论】:
错误是什么?并发布您用于邮递员的 json。 您正在检查设备是否存在以及是否存在尝试添加。在做什么?正在添加新设备或更新? 还有什么问题?你有什么错误吗? @Serge 我有两个模型:设备和设备数据。设备数据与其 ID 相关,因为如果我有例如 5 个设备,我想知道哪些设备已在数据库的设备数据表中发布数据。所以是的,首先我检查设备是否存在,如果存在,那么我将在与该设备相关的数据表中添加新数据记录。我正在使用 json body "Latitude": 23, "Longitude": 43, "Altitude": 123, "Speed": 11, "DeviceId": 7 向 localhost:44372/api/DeviceData 发送帖子请求我收到错误: “设备不存在!”当 device = null 时抛出 【参考方案1】:当您检查设备是否存在时,您使用了错误的 Id,您必须改用 DeviceId
var exist = deviceContext.Devices.Any(i=> i.Id==deviceData.DeviceId);
if (!exist) return BadRequest(Messages.DeviceNotExist);
恕我直言,替换
deviceContext.DeviceData.Add(new DeviceData
Timestamp = DateTime.Now,
Latitude = deviceData.Latitude,
Longitude = deviceData.Longitude,
Altitude = deviceData.Altitude,
Speed = deviceData.Speed,
DeviceId = deviceData.DeviceId
);
与
deviceData.Timestamp = DateTime.Now;
deviceContext.DeviceData.Add(deviceData);
【讨论】:
以上是关于如何将 JSON 作为参数传递给控制器 .net api 中的 Post 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何将json POST数据作为对象传递给Web API方法?
如何将 JSON 返回数据作为参数传递给 URL 路由(laravel)
在 ASP.Net Core 项目中使用 ADO.Net 将 JSON 类型作为参数传递给 SQL Server 2016 存储过程