如何在WebAPI后端C#上接收JSON数据?

时间:2015-06-24 09:22:44

标签: c# json asp.net-web-api

如何在C#中的WebAPI后端接收JSON数据?

我从我的JavaScript前端发送了以下JSON。

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

我有这个课程:

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

我的WebAPI方法:

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

            return true;
        } 

我只获得“null”作为我的“PurchaseOrder order”对象的结果。问题是我使用[System.Web.Mvc.HttpPost]吗?我也尝试了[System.Web.Http.HttpPost],但得到了相同的结果。 //马丁

4 个答案:

答案 0 :(得分:14)

您的请求的Content-Type应为"application/json"

如果您将json发布在请求正文中,则将方法签名更改为

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

答案 1 :(得分:6)

问题解决了,缺少了“application / json”。对于有同样问题的其他人,这是我的功能。我使用Knockout.js,因此是“自我”字。

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

                }
            });
        }

答案 2 :(得分:1)

将您的实施更改为此。

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

}

更多详情 - http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

答案 3 :(得分:-4)

尝试使用NuGet的Newtonsoft.Json包。它们具有将任何字符串序列化和反序列化为Json的函数。 还尝试使用动态类型变量。有助于反序列化。