我正在编写一个asp.net应用程序,我正在尝试使用jquery ajax发布web api2控制器方法的发布请求。这样做会导致错误500内部服务器错误。 这是jquery代码
function reload(quantity, cartItemId) {
$.ajax({
url: "/api/user/UpdateCart",
method: "POST",
data: { quantity: quantity, cartItemId:cartItemId },
success: function() {
// window.location.href = "/user/ViewCart";
}
});
}
function addItem(cartItemId) {
var quantity = parseInt(document.getElementById("txt-box-" + cartItemId).value);
quantity++;
document.getElementById("txt-box-" + cartItemId).value = quantity;
reload(quantity,cartItemId);
}
在我的web api 2控制器中,我有以下代码
[AllowAnonymous]
[HttpPost]
public IHttpActionResult UpdateCart([FromBody]int quantity,[FromBody]int cartItemId)
{
var cartItemInDb = _unitOfWork.CartItemRepository.Read(cartItemId);
cartItemInDb.Quantity = quantity;
_unitOfWork.Complete();
return Ok();
}
答案 0 :(得分:1)
我不认为webapi允许多个frombody参数。当我尝试使用您的代码时,我收到了此错误 - "无法将多个参数('数量'和' cartItemId')绑定到请求中内容。&#34 ;.当存在绑定问题时,您的函数将不会在visual studio中被命中,因为它将从管道本身返回。
另外,根据设计,您可以拥有数量和cartItemId并更改您的代码如下:
控制器代码:
[AllowAnonymous]
[HttpPost]
[Route("api/user/UpdateCart")]
public IHttpActionResult UpdateCart([FromBody]CartDetails cartDetails)
{
Console.WriteLine(cartDetails.cartItemId);
Console.WriteLine(cartDetails.quantity); // Your code instead of Console.WriteLine();
return Ok();
}
类:
public class CartDetails
{
public int quantity;
public int cartItemId;
}
用javascript调用ajax:
$.ajax({
url: "http://localhost:49946/api/user/UpdateCart",
method: "POST",
contentType: "application/json",
data: JSON.stringify(
{
quantity: 12, cartItemId: 109
}),
success: function (result) {
console.log("SUCESS: " + result);
},
error: function (data) {
console.log("error: " + data.responseText);
}
});