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