JSON数据大小限制

时间:2014-05-04 00:18:38

标签: json asp.net-mvc-4 highcharts

在HighChart中,我需要绘制一系列针对x和y轴的数据。 HighChart希望数据采用json格式。即,[[x,y],[x,y] ...... [x,y]]。其中x和y是时间(1392345000 - Unix纪元格式)和值(49.322)。所以我正在进行ajax调用以获取数据,并且在成功时我将json返回的数据呈现在highchart中。在大多数情况下,即,如果数据计数([x,y])低于87500行,则Json将数据从控制器返回到视图。但是当数据超过87500时,使用404调用ajax错误,未找到错误。 json返回的数据是否有任何大小限制。

第1节 - 控制器类

public JsonResult GetPlotData(Dictionary<string, List<ChartData>> dataPlot)
{

    // dataPlot = D00213 - [[13245678000,49.9],[13245345000,43.9]...[n,n]]
    // if dataPlot.Count < 87500 here throwing error and in ajax error 404 Not found
    return Json(dataPlot, JsonRequestBehavior.AllowGet);

}

第2节 - Ajax

 $.ajax(
    {
          url: '../Report/GetPlotData',
          data: { "fromDate": fromDate, "toDate":toDate, "item": items[i].id }, 
          type: "POST",
          dataType: "json",
          cache: false,
          success: function(chartData) {
              alert(‘success’
          },
          error: function(xhr, ajaxOptions, thrownError) 
          {
                    debugger;
                    ShowDialogError(xhr, 'Site Status Report');
                  }
          });

4 个答案:

答案 0 :(得分:13)

您的网络服务器将限制最大响应大小限制。您应该参考您选择的Web服务器上的文档,看看如何最好地增加该限制,超出今天设置的范围。

JsonResult类确实有一个属性(maxJsonLength),你也可以尝试更改

var jsonResult = Json(dataPlot, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;

可能的配置更改

<configuration>
    <system.web.extensions>
        <scripting>  
             <webServices>                                                   
                 <jsonSerialization maxJsonLength="1000000" />                 
             </webServices>
        </scripting>
    </system.web.extensions>
</configuration>

最重要的是 - 您可能需要重新考虑您的调用,以限制或以某种方式将响应划分为更易于管理的块,因为默认响应限制相当大并且可能需要很长时间才能返回(网络延迟)

一般来说,增加响应大小限制通常不是一个好主意。但这可能是您遇到的问题。

答案 1 :(得分:1)

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

这是在帖子中提高数据限制的最佳方法。

答案 2 :(得分:0)

我遇到了同样的问题,我在博客中解释了我是如何解决的,请看看,在我的情况下配置更改没有帮助

http://kaushikghosh12.blogspot.com/2014/11/aspnet-mvc-4-json-post-max-limit-problem.html

另请参阅此链接,其中有3个解决方案可以解决此问题而不是配置更改,因为配置更改在大多数情况下都不起作用,例如当您将ASP.NET MVC站点作为主站点的子站点运行时是一个ASP.NET站点。

http://erraticdev.blogspot.com/2010/12/sending-complex-json-objects-to-aspnet.html

答案 3 :(得分:0)

MaxJsonLength:这有助于获取或设置您将发送的最大JSON内容长度。缺省值为2097152个字符,等于4 MB的Unicode字符串数据。您甚至可以根据需要增加大小,为此,您将在本文后面获得一个想法

解决方案:

protected override JsonResult Json(object data, string contentType,Encoding contentEncoding, JsonRequestBehavior behavior)

    {

    return new JsonResult()

    {

    Data = data,

    ContentType = contentType,

    ContentEncoding = contentEncoding,

    JsonRequestBehavior = behavior,

    MaxJsonLength = Int32.MaxValue

    };

    }