web-dev-qa-db-fra.com

Comment recevoir des données JSON sur le backend C # de l'API Web?

Comment recevoir des données JSON sur mon backend WebAPI en C #?

J'ai le JSON suivant envoyé à partir de mon interface JavaScript.

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

J'ai ces cours:

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

Et ma méthode WebAPI:

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

            return true;
        } 

Je n'obtiens que la valeur "null" pour mon objet "Commande PurchaseOrder". Le problème peut être que j'utilise [System.Web.Mvc.HttpPost]? J'ai aussi essayé [System.Web.Http.HttpPost], mais j'obtiens le même résultat. // Martin

27
Martin Nilsson

Le Content-Type de votre requête doit être "application/json"

Si vous postez votre json dans un corps de la demande, changez la signature d'une méthode en

[HttpPost]
public bool AddOrder([FromBody] PurchaseOrder order)
{
}
14
Anton Sizikov

Problème résolu, c'était "l'application/json" qui manquait. Pour les autres personnes ayant le même problème, voici ma fonction. J'utilise Knockout.js, d'où le mot "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");

                }
            });
        }
6
Martin Nilsson

Changez votre implémentation en ceci.

[System.Web.Http.HttpPost]
public bool AddOrder([FromBody] PurchaseOrder order)
{

}

Pour plus de détails - http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

1