这是我的模特:
namespace API.Model
{
[Serializable]
public class OrderModel
{
public string hashKey { get; set; }
public int orderId { get; set; }
public string skuId { get; set; }
public string itemId { get; set; }
public string prevItemId { get; set; }
public int quantity { get; set; }
}
}
这是我的控制器
[RoutePrefix("api/orderapi")]
public class OrderAPIController : ApiController
{
[HttpPost]
[Route("UpdateMultipackage")]
public IHttpActionResult UpdatePOMultipackageSKU([FromBody] OrderModel multipackageSKU)
{
if (!ModelState.IsValid)
{
var errors = ModelState
.SelectMany(x => x.Value.Errors, (y, z) => z.Exception.Message);
return BadRequest(errors.ToString());
}
MPPEWebServices.API.ResInfo results = new MPPEWebServices.API.ResInfo();
Guid appGuid = new Guid(multipackageSKU.hashKey);
MPPEOrderController orderController = new MPPEOrderController();
Guid skuIdGuid = new Guid(multipackageSKU.skuId);
Guid itemIdGuid = new Guid(multipackageSKU.itemId);
Guid prevItemIdGuid = new Guid(multipackageSKU.prevItemId);
if (orderController.UpdatePOMultipackageSKU(multipackageSKU.orderId, skuIdGuid, itemIdGuid, prevItemIdGuid, multipackageSKU.quantity) > 0)
{
results.Success = true;
results.Message = "Success";
}
else
{
results.Success = false;
results.Message = "Failed";
}
return Ok(results.ToString());
}
}
这就是我在ajax中调用控制器的方式。
var obj =
{
hashKey: "5B1D386B-D725-4AD3-AF9D-2CC3FCBE7AAC",
orderId: 1166,
skuId: "5B1D386B-D725-4AD3-AF9D-2CC3FCBE7AAC",
itemId: "5B1D386B-D725-4AD3-AF9D-2CC3FCBE7AAC",
prevItemId: "5B1D386B-D725-4AD3-AF9D-2CC3FCBE7AAC",
quantity: 1
};
$.ajax({
type: 'POST',
url: '/api/orderapi/updatemultipackage',
data: JSON.stringify(obj),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (result) {
alert('Success! ' + result.responseText + " " + this.url + " " + this.data);
},
error: function (result) {
alert('Error! ' + result.responseText + " " + this.url + " " + this.data);
},
async: true
});
使用此代码,我将json传递给控制器中的对象。当我在Controller中设置断点或当我将模型放在监视中时。模型中的所有变量仍然为null。但是在我的JavaScript中,我所有的变量都有值。请有人帮我。谢谢!
答案 0 :(得分:0)
您请求的主体与api方法中的预期对象不匹配。
当您将主体定义为"{multipackageSKU:" + JSON.stringify(obj) + "}"
时,实际上等于C#类为
public class RequestModel
{
public OrderModel MultipackageSKU { get; set; }
}
这就是为什么它与api方法签名不匹配的原因。
最简单的解决方案,尝试将请求正文定义为
data: JSON.stringify(obj)