更新:这个问题可能是由于我对 SPA 模板和技术缺乏了解。我试图忽略结果库,并在此错误之前对模板进行了大量手动修改。请以非建设性投票结束。
我正在尝试具有真实世界类型场景的 ASP.Net MVC4 SPA 项目。由于结果尚不存在,因此我仅在客户端使用 WebAPI 部分和带有 JQuery Ajax 方法的 Knockout。
一切都很好,直到我不得不使用任意参数发布数据:
这是我的控制器:
public class ProductLineController : DbDataController<WebSiteContext>
{
[HttpPost]
public HttpResponseMessage<Order> AddProductLine(int productId, int orderId)
{
[invoke logic to add the product line]
[return the updated order]
}
}
调用此控制器的客户端代码位于 Knockout 视图模型上,如下所示:
this.addProduct = function (product) {
var prodId = product.ProductId;
var requestUrl = baseUrl + "productline";
$.ajax({
url: requestUrl,
cache: false,
type: 'POST',
data: JSON.stringify({productId: prodId, orderId: orderId}),
dataType:"json",
contentType: 'application/json; charset=utf-8',
success: function (data) {
self.order(data);
}
});
非常简单。在对类似问题进行了一些调查后,我采取了预防措施来对 json 参数数据进行字符串化。
Fiddler 报告的请求标头是:
POST http://localhost:50045/api/orderedproduct HTTP/1.1
Host: localhost:50045
Connection: keep-alive
Content-Length: 27
Origin: http://localhost:50045
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) [snipped]
Content-Type: application/json; charset=UTF-8
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:50045/Order/Create
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8,en-US;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
{"productId":1,"orderId":1}
如您所见,JSON 格式正确。但反应是杀手500
System.Runtime.Serialization.SerializationException
There was an error deserializing the object of type System.Int32. The value '' cannot be parsed as the type 'Int32'.
诅咒堆栈跟踪比这更长,但这是重要的部分。
你能告诉我我的错误是什么吗?我只是迷路了。