Javascript Ajax请求抛出500个错误,但请求有效

Javascript Ajax请求抛出500个错误,但请求有效,javascript,asp.net,ajax,asp.net-mvc,asp.net-mvc-4,Javascript,Asp.net,Ajax,Asp.net Mvc,Asp.net Mvc 4,我设置了一个API控制器来处理ajax请求。每次从下面的脚本发出Ajax请求时,我都会收到一个500错误: POST http://localhost:58463/api/Reservations 500 (Internal Server Error) jquery-2.1.0.min.js:4 l.cors.a.crossDomain.send jquery-2.1.0.min.js:4 o.extend.ajax jquery-2.1.0.min.js:4 (anonymous functi

我设置了一个API控制器来处理ajax请求。每次从下面的脚本发出Ajax请求时,我都会收到一个500错误:

POST http://localhost:58463/api/Reservations 500 (Internal Server Error) jquery-2.1.0.min.js:4
l.cors.a.crossDomain.send jquery-2.1.0.min.js:4
o.extend.ajax jquery-2.1.0.min.js:4
(anonymous function) Confirm?spaceNumber=5:129
o.event.dispatch jquery-2.1.0.min.js:3
r.handle
但奇怪的是,请求实际上成功了。它创建了一个预订。这是怎么可能的,我如何解决错误

视图:

解决方案 海梅加告诉我要进一步调查我收到的500个错误,这为我指明了正确的方向。使用FireBug,我在异常消息中发现:

"Message":"An error has occurred.","ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'."
我可以通过将这些行添加到我的WebApiConfig.cs文件来解决这个问题

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);

您正在将返回数据类型指定为JSON

jQuery正在尝试解析对JSON的响应,但由于无法解析,它认为请求未成功

如果删除该数据类型,jQuery将尝试自己解决它,它将解决您的问题


希望这有助于

调试并逐步完成控制器。猜测一下,您在保存预订之后/期间的某个地方抛出了一个异常,这样实际的保存就已经发生了。如果出现异常,ApicController将发送一个500响应。@SMcCrohan我添加了断点-看起来返回的响应带有状态代码201。还有其他想法吗?@anwyatt你之前说过HttpStatus代码是500,现在是201……是哪一个?0.o如果您得到的是201,那么这是正确的,因为您正在返回HttpStatusCode。Created@heymegaajax请求接收到一个500,但在添加断点时,我可以看到我的API控制器返回一个201。@anwyatt Ok-使用firebug/fiddler或任何其他http流量查看器查看500响应中的数据。在我看来,异常处理程序可能创建了500错误,您的stacktrace和错误消息将在内部删除数据类型:json似乎没有解决问题-是否有其他数据类型我应该指定?我注意到的另一件事-当我删除数据类型:json时,它在发布表单时不再创建记录。@anwyatt数据类型与仅在其响应中发送的请求数据无关,因此它应该仍然创建了您的记录。啊-实际上您是正确的。它仍然会创建记录。
"Message":"An error has occurred.","ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'."
var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
 dataType: "json"