我正在与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" />
但仍然没有区别!
答案 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);
}