MVC应用程序中的500(内部服务器错误)

时间:2014-02-02 16:09:55

标签: asp.net-mvc http

我正在与MVC4合作。请求大量数据时收到500 (Internal Server Error)错误。我认为这是因为大量的数据。怎么解决??? 错误描述是:

'Error during serialization or de-serialization using JSON JavaScriptSerializer. The length of the string exceeds the value set on the MaxJasonLength property.'

我在web.config中试过这个:

<add key="aspnet:MaxJsonDeserializerMembers" value="1500000000000" />

但仍然没有区别!

2 个答案:

答案 0 :(得分:1)

您是对的,您需要更新值以覆盖默认的最大长度。但是,您尝试的内容不是正确的地方。

首先,使用以下块更新您的web.config

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

如果您仍然遇到问题(因为我认为在MVC4上出于某种原因在控制器中不支持此设置),您可以在实际序列化数据时尝试以下操作。

var serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue;

var jsonData = new { key = Records };
var result = new ContentResult{
    Content = serializer.Serialize(jsonData),
    ContentType = "application/json"
};
return result;

答案 1 :(得分:-1)

在MVC 4中,您拥有异步控制器选项。我想你有一个包含大量数据的网格。这种场景曾经在经典ASP中运行良好。开发人员会在生成一定数量的行后定期刷新响应。但是在ASP.Net webforms和ASP.Net MVC中,你必须以不同的方式处理它们。异步控制器将在这里提供一些良好的性能。我引用了msdn文章http://msdn.microsoft.com/en-us/library/ee728598(v=vs.100).aspx

    public void IndexAsync(string input)
    {
        List<Sample> test = new List<Sample>();
        AsyncManager.OutstandingOperations.Increment();
        //You can replace this GetHashCode with different webservice call or some other delaying task
        for (int i = 0; i < 100000; i++)
        {
            test.Add(new Sample {SampleID=i,Name="Meow" });
        }
        AsyncManager.Parameters["inp"] = test;
        AsyncManager.OutstandingOperations.Decrement();
    }
    public  ActionResult IndexCompleted(IList<Sample> inp)
    {
       return View(inp);
    }