2015-06-24 6 views
24

Jak otrzymać dane JSON na moim backend WebAPI w C#?Jak otrzymać dane JSON na backend WebAPI C#?

Mam następujące JSON wysłane z mojego interfejsu JavaScript JavaScript.

{ 
    "User_Id": 1, 
    "TotalPrice": 35, 
    "DeliveryAddress": "At my house", 
    "CartItems": [ 
     { 
      "Id": 1009, 
      "Name": "Superman juni 2014", 
      "Quantity": 1, 
      "Price": 35 
     } 
    ] 
} 

mam tej klasy:

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; } 
    } 

I moja metoda WebAPI:

[System.Web.Mvc.HttpPost] 
     public bool AddOrder(PurchaseOrder order) 
     { 
      // Here I will do something 

      return true; 
     } 

mam tylko "null" jako wynik dla mojego "porządek PurchaseOrder" obiektu. Czy problemem może być to, że używam [System.Web.Mvc.HttpPost]? Próbowałem również [System.Web.Http.HttpPost], ale uzyskać ten sam wynik. // Martin

+1

Czy ustawiasz Content-Type na 'application/json' na żądanie JavaScript? – Markus

+0

Czy możesz dołączyć pełne żądanie JavaScript? – DavidG

+0

zbuduj obiekt javascript o nazwie 'order' z danymi i użyj' JSON.stringify' podczas wysyłania. –

Odpowiedz

11

Content-Type od żądania powinny być "application/json"

Jeśli wysłać JSON w treści żądania niż zmienić podpis metody do

[HttpPost] 
public bool AddOrder([FromBody] PurchaseOrder order) 
{ 
} 
+0

'contentType' w javascript. –

+0

'[FromBody]' może nie być konieczne. –

-4

Spróbuj użyć pakietu Newtonsoft.Json z Nuget. Mają funkcje serializowania i deserializowania dowolnego ciągu znaków na Json. Spróbuj także użyć zmiennych typu dynamicznego. Pomaga w deserializacji.

+5

to nie jest odpowiedź. –

+0

Brak odpowiedzi. –

5

Problem rozwiązany, brakowało "application/json". Dla innych osób mających ten sam problem, oto moja funkcja. Używam Knockout.js, stąd słowo "self".

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"); 

       } 
      }); 
     } 
+0

'var self = this 'jest pospolitą rzeczą, po prostu powiedzmy o czym" to ", do którego się odnosisz, ponieważ może się to zmienić, gdy jesteś w środku, powiedz na przykład' error: function() {} '. –

Powiązane problemy