如何解决通过POST
我有一个.NET Core 3项目,当使用Postman测试我的API时,我通常会这样测试POST请求:
http://localhost/api/CarEngine
然后在“正文”部分,我将使用新CarEngine
的JSON表示形式:
{
"engineId": "495ssueyq271","source": "AUS","material": "Cast Iron","displacement": "4.7l","fuelType": "gas"
}
API端点将如下所示:
[HttpPost]
public async Task<ActionResult<CarEngine>> PostCarEngine( CarEngine carEngine)
{
// ...
}
但是我现在需要修改此端点以同时传递countryId
。 countryId
不是CarEngine
模型的一部分,但是API需要使用该countryId
更新另一个模型。因此POST方法将如下所示:
[HttpPost]
public async Task<ActionResult<CarEngine>> PostCarEngine(String countryId,CarEngine carEngine)
{
// ...
}
我尝试在JSON中传递countryId,但这不起作用,因为countryId
不是CarEngine
的属性。有没有办法传递JSON模型,并且在同一个API调用中传递不属于该模型的东西?
解决方法
- 您可以将countryId作为查询字符串传递,并将carEngine作为帖子正文传递
- 或第二种方式,您既可以作为
content-type:application/x-www-form-urlencoded
,也可以在帖子正文中作为countryId=1&carEngine={Id:1,Body:'x44'}
(编码格式:countryId%3D1%26carEngine%3D%7BId%3A1%2CBody%3A'x44'%7D
)
当然,将您的api方法更改为此:
[HttpPost)]
public async Task<ActionResult<CarEngine>> CreateCarEngine([FromQuery] string countryId,[FromBody] CarEngine carEngine)
{ ... }
该网址如下所示:
POST http://localhost/api/CarEngine?countryId=123
countryId
将成为查询参数。
carEngine
将正文参数序列化为json。
您可以参考以下方法来传输“ countryId”值和“ carEngine”对象。
-
在网址中传输
countryId
值,并将carEngine
对象放入请求正文中。如下修改您的代码:
[HttpPost("countryId")] public async Task<ActionResult<CarEngine>> PostCarEngine(string countryId,CarEngine carEngine) {
然后,PostMan屏幕截图如下:
-
创建一个新的ViewModel,其中包含countryId和CarEngine的所有属性。然后,将其传输到请求正文中。
-
从表单中传输数据。
PostMan屏幕截图如下:
通过使用此方法,您可以使用
[FromForm]
属性来获取值。[HttpPost()] public async Task<ActionResult<CarEngine>> PostCarEngine([FromForm]string countryId,[FromForm]CarEngine carEngine) {
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。