如何在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],但得到了相同的结果。 //马丁
答案 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的函数。 还尝试使用动态类型变量。有助于反序列化。