c# Web API的邮差请求给出了一个null属性
本文关键字:一个 属性 null API Web 邮差 请求 | 更新日期: 2023-09-27 18:14:54
我正在尝试使用一个简单的Web API方法。当我执行POST
时,我在Visual Studio的调试器中看到该方法被击中,并且cartItemId
被正确填充。但我的第二个参数,quantity
是null
。
Web API:
[HttpPost]
[Route("api/Cart/{cartItemId}")]
[ResponseType("200", typeof(ResponseObject<CartItemDomainModel>)), ResponseType("500", typeof(Exception))]
public async Task<IHttpActionResult> UpdateQuantity(int cartItemId, [FromBody]string quantity)
{
var result = await _cartService.UpdateCartItemQuantity(cartItemId, Convert.ToInt32(quantity));
return ...;
}
这是邮差发送的信息:
POST /api/Cart/1 HTTP/1.1
Host: localhost:51335
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 5d4a40f1-794d-46fd-1776-2e0c77979f4a
{
"quantity":"5"
}
你不是在发送一个复杂的对象,只是一个字符串。
用"5"代替"quantity":"5"。
如果你有一个模型类,它有一个属性叫做'quantity',你只会使用后者
当你发送一个带有application/json内容类型的POST请求时,你在你的action方法上有一个基本参数,你必须在body中只传递一个原始json字符串,而不是一个json对象。
所以你的请求应该是这样的:
POST /api/Cart/1 HTTP/1.1
Host: localhost:48552
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: d5038684-3a5e-51f6-308c-399dda34457c
"5"
同样,如果你知道你的参数是一个int型,你不需要传递一个字符串然后转换它,而是直接从ModelBinder获得一个int型。所以如果你重构你的动作来接收一个int形参:
[HttpPost]
[Route("api/Cart/{cartItemId}")]
[ResponseType("200", typeof(ResponseObject<CartItemDomainModel>)), ResponseType("500", typeof(Exception))]
public async Task<IHttpActionResult> UpdateQuantity(int cartItemId, [FromBody]int quantity)
{
var result = await _cartService.UpdateCartItemQuantity(cartItemId,quantity));
return ...;
}
你的请求应该是这样的:
POST /api/Cart/1 HTTP/1.1
Host: localhost:48552
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: d5038684-3a5e-51f6-308c-399dda34457c
5
希望这对你有帮助!
POST方法不接受URL参数。如果你想使用POST方法,你应该发送一个属性对象