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

如何在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 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],但得到了相同的结果。 //马丁

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

如果您在请求的正文中发布json而不是将方法签名更改为

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

问题解决了,缺少了“application / json”。 对于有同样问题的其他人,这是我的function。 我使用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"); } }); } 

将您的实现更改为此。

 [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

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