【发布时间】:2013-04-19 17:42:49
【问题描述】:
我正在尝试使用 OData 将数据发送到 Web API。但接收到的实体始终为空。
我使用 JQuery 进行此调用:
$.ajax({
url: "/odata/Products",
type: "POST",
//contentType: "application/json;odata=verbose",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(productToAdd),
dataType: "json",
success: function () {
alert("Server call has been OK!!");
},
error: function () {
alert("Server call has been failed!!");
}
});
productToAdd 对象如下:
{"name":"Apple","description":"Good!!","price":"12.3","category":"Fruit"}
我的控制器是:
public class ProductsController : EntitySetController<Product, string>
{
private IProductService _prodSvc;
public ProductsController(IProductService prodSvc)
{
_prodSvc = prodSvc;
}
[Queryable]
public override IQueryable<Product> Get()
{
return _prodSvc.GetAllProducts();
}
protected override Product CreateEntity(Product product)
{
var addedProduct = _prodSvc.AddProduct(product);
return addedProduct;
}
}
我也尝试使用 datajs-1.10.js 框架,但结果相同。
OData.request(
{
requestUri: "/odata/Products",
method: "POST",
data: productToAdd
},
function (data) {
alert("Server call has been OK!!");
}
);
我认为反序列化 JSON 对象时出了点问题,但我不知道是什么。你能帮帮我吗?
谢谢!!
【问题讨论】:
-
一般来说,我建议您在遇到此类问题时首先尝试确定问题是客户端问题还是服务器端问题。使用Fiddler 之类的工具(或任何其他可以监控您的 HTTP 请求和响应的工具)查看从服务器返回的内容。服务器是返回成功的状态码还是错误?
-
你能检查你控制器上的 ModelState 属性吗?那应该有关于反序列化失败的任何信息。
标签: jquery post asp.net-web-api odata