大型JSON对象的500内部服务器错误

时间:2015-05-20 21:50:17

标签: json

我有一个网站,显示数据库中的数据列表。我注意到浏览器报告了500内部服务器错误,但仅在一种情况下。这是控制器方法。

    [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult GetTouches(FormCollection collection)
    {
        try
        {
            List<p_SiteTouchSummary> pSiteTouchSummarys = ptsRepository.GetPSiteTouchSummarys().ToList();

            return Json(new { wasSuccess = true, pSiteTouchSummarys });
        }
        catch (Exception ex)
        {
            Log.Error(ex, Request.Path, UserHelper.GetEmployeeLogin());
            return Json(new { wasSuccess = false, message = "Error - Search failed" });
        }
    }

在调试中我发现它会到达返回,存在方法,然后永远不会返回到调用它的javascript文件。浏览器只需要大约1秒的时间来报告500错误,并且它不一致,所以我认为它不会超时。

此外,我使用Take语句修改了返回的列表,它在150处工作,但在200处不工作。如果我执行Skip(150).Take(50)也可以工作。似乎有大约200个条目以某种方式打破它,但它没有报告它太大而不能反序列化。

任何人都知道发生了什么事并找到解决问题的好方法吗?

2 个答案:

答案 0 :(得分:0)

状态500 =“内部服务器错误”。对于服务器应该给你合理答复但不提供合理答复的任何内容,这都是一个错误的错误。例如,如果您的服务器代码抛出了一个无法处理的异常,服务器可能会通过将状态500返回给调用者来处理它。

解决方案:1。向负责服务器代码的人员投诉。 2.服务器人员可能能够准确地告诉您触发错误的原因,因此您可以避免错误。 3.他们可能不会给你任何有用的东西,所以你以你认为保证没有状态500错误的方式改变你的请求,如果你仍然得到一个然后重复请求请求更少的数据。

答案 1 :(得分:0)

JsonResult类确实具有属性(maxJsonLength),请尝试对其进行更改:

    var jsonResult = Json(dataModel,
    JsonRequestBehavior.AllowGet);
    jsonResult.maxJsonLength = int.MaxValue;
    return jsonResult;

<appSettings>
  <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>