How do I receive JSON data on my WebAPI backend in C#?
I have the following JSON sent from my JavaScript frontend.
{ "User_Id": 1, "TotalPrice": 35, "DeliveryAddress": "At my house", "CartItems": [ { "Id": 1009, "Name": "Superman juni 2014", "Quantity": 1, "Price": 35 } ] }
I have this classes:
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; } }
And my WebAPI method:
[System.Web.Mvc.HttpPost] public bool AddOrder(PurchaseOrder order) { // Here I will do something return true; }
I only get "null" as the result for my "PurchaseOrder order" object. Can the problem be that I´m using [System.Web.Mvc.HttpPost]? I have also tried [System.Web.Http.HttpPost], but get the same result. // Martin
To post JSON to a REST API endpoint using C#/. NET, you must send an HTTP POST request to the REST API server and provide JSON data in the body of the C#/. NET POST message. You also need to specify the data type in the body of the POST message using the Content-Type: application/json request header.
To receive JSON from a REST API endpoint, you must send an HTTP GET request to the REST API server and provide an Accept: application/json request header. The Accept header tells the REST API server that the API client expects JSON.
The Content-Type
of your request should be "application/json"
If you post your json in a body of the request than change a method signature to
[HttpPost] public bool AddOrder([FromBody] PurchaseOrder order) { }
Problem solved, it was the "application/json" that was missing. For other persons having the same problem, here is my function. I´m using Knockout.js, hence the "self"-word.
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"); } }); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With