Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to receive JSON data on WebAPI backend C#?

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

like image 485
Martin Nilsson Avatar asked Jun 24 '15 09:06

Martin Nilsson


People also ask

How do I post JSON data to API using C#?

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.

How do I get raw JSON data from REST API?

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.


2 Answers

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) { } 
like image 54
Anton Sizikov Avatar answered Sep 21 '22 06:09

Anton Sizikov


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");                  }             });         } 
like image 42
Martin Nilsson Avatar answered Sep 19 '22 06:09

Martin Nilsson