如何在WebAPI后端C#上接收JSON数据?
如何在C#中的WebAPI后端接收JSON数据 我已经从JavaScript前端发送了以下JSON如何在WebAPI后端C#上接收JSON数据?,c#,json,asp.net-web-api,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
{
"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; }
}
我的“PurchaseOrder”对象的结果只有“null”。问题是我使用的是[System.Web.Mvc.HttpPost]吗?我也尝试过[System.Web.Http.HttpPost],但得到了相同的结果。
//Martin请求的
内容类型应为“application/json”
若在请求体中发布json,则将方法签名更改为
[HttpPost]
public bool AddOrder([FromBody] PurchaseOrder order)
{
}
将您的实现更改为此
[System.Web.Http.HttpPost]
public bool AddOrder([FromBody] PurchaseOrder order)
{
}
有关更多详细信息-请尝试使用NuGet提供的Newtonsoft.Json包。它们具有将任何字符串序列化和反序列化为Json的函数。
还可以尝试使用动态类型变量。有助于反序列化。问题已解决,缺少的是“application/json”。对于其他有同样问题的人,这里是我的函数。我使用的是Knockout.js,因此使用了“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");
}
});
}
您是否在JavaScript请求中将内容类型设置为application/json
?是否可以包含完整的JavaScript请求?使用您的数据构建名为order
的JavaScript对象,并在发布时使用json.stringify
。除非您使用的是vNext,这是错误的System.Web.Mvc.HttpPost
它应该来自Http
名称空间,我相信不是Mvc
名称空间。其次,这与您的JavaScript有关。contentType
在JavaScript中。[FromBody]
可能不是必需的。@AmitKumarGhosh不,[FromBody]
肯定是必需的。默认情况下,WebApicController实例在URL中查找参数。如果您使用的是JSON字符串并发布该字符串,那么它必须查看请求正文。对于WebApi,您应该使用此属性[System.Web.Http.HttpPost]
@savendraekanayake看起来您与Anton同时键入此响应&在他键入响应11分钟后才提交此响应。。。但基本上是一样的,至少你有一个链接。缺少有关内容类型的部分。。但是OP没有发布他的JavaScript也没用——如果他发布了,我相信你会发现的wink:这不是answar,也不是答案。var self=this
是一个常见的问题,让我们知道你指的是什么this
,因为当你在里面时,它可能会改变,比如说error:function(){}
。
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");
}
});
}