¿Cómo recibo datos JSON en mi backend WebAPI en C#?
Tengo el siguiente JSON enviado desde mi interfaz de JavaScript.
{ "User_Id": 1, "TotalPrice": 35, "DeliveryAddress": "At my house", "CartItems": [ { "Id": 1009, "Name": "Superman juni 2014", "Quantity": 1, "Price": 35 } ] }Tengo estas clases:
public class PurchaseOrder { public List<CartItem> CartItems { get; set; } public string DeliveryAddress { get; set; } public int TotalPrice { get; set; } public int User_Id { get; set; } } public class CartItem { public int Id { get; set; } public string Name { get; set; } public int Quantity { get; set; } public int Price { get; set; } }Y mi método WebAPI:
[System.Web.Mvc.HttpPost] public bool AddOrder(PurchaseOrder order) { // Here I will do something return true; }Solo obtengo "nulo" como resultado de mi objeto "Orden de compra". ¿El problema puede ser que estoy usando [System.Web.Mvc.HttpPost]? También probé [System.Web.Http.HttpPost], pero obtuve el mismo resultado. // Martín
El Content-Type de su solicitud debe ser "application/json"
Si publica su json en un cuerpo de la solicitud, cambie la firma de un método a
[HttpPost] public bool AddOrder([FromBody] PurchaseOrder order) { }Problema resuelto, faltaba la "aplicación/json". Para otras personas que tienen el mismo problema, aquí está mi función. Estoy usando Knockout.js, de ahí la palabra "yo".
self.makePurchase = function () { var tempUserId = self.orderUserId(); var tempCartPrice = self.ShoppingCartPrice(); var tempAddress = self.orderAddress(); var tempCart = self.ShoppingCart(); var orderSave = new PurchaseSave(tempUserId, tempCartPrice, tempAddress, tempCart); var myData = ko.toJSON(orderSave); console.log(myData); $.ajax({ type: "POST", async: false, url: '/Products/AddOrder', contentType: "application/json", // Thank you Stackoverflow!!! dataType: "json", traditional: true, data: myData, error: function (xhr, textStatus, errorThrown) { console.log(xhr.responseText); console.log("Inside the error method"); }, success: function (data) { console.log("Inside the success method"); } }); }Cambie su implementación a esto.
[System.Web.Http.HttpPost] public bool AddOrder([FromBody] PurchaseOrder order) { }Para más detalles: http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api