c# Web API的邮差请求给出了一个null属性

本文关键字:一个 属性 null API Web 邮差 请求 | 更新日期: 2023-09-27 18:14:54

我正在尝试使用一个简单的Web API方法。当我执行POST时,我在Visual Studio的调试器中看到该方法被击中,并且cartItemId被正确填充。但我的第二个参数,quantitynull

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"
}

c# Web API的邮差请求给出了一个null属性

你不是在发送一个复杂的对象,只是一个字符串。

用"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方法,你应该发送一个属性对象