解决.NETMVC(ajax)Json请求太大,无法反序列化(The JSON request was too large to be deserialized)问题
Posted liuslayer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决.NETMVC(ajax)Json请求太大,无法反序列化(The JSON request was too large to be deserialized)问题相关的知识,希望对你有一定的参考价值。
遇到这个问题时候感觉挺奇怪,感觉数据并没有几十上百MB的级别,怎么就报Json请求太大了。但是无论如何,遇到了就尝试解决。
查到的最多的解决方案是:
1、修改Web.config文件配置节system.web下httpRuntime maxRequestLength
<system.web>
<httpRuntime maxRequestLength="2147483647" ...
1
2
意料中的无效,因为我站点原本配置中的最大请求长度就是2147483647。这个配置的单位可是千字节(KB)(参见),也就是可以接受的最大请求长度为2TB!!!更加懵逼了,我的请求充其量也就MB的单位,怎么就超长了?!?!
接着查询到的另一个解决方案是:
2、修改appSetting配置aspnet:MaxJsonDeserializerMembers
官方说明中该配置项的默认配置是1000,感觉找到点了!修改配置项如下,果然搞定了!
<add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
1
还是很疑惑,为什么要在两个地方配置可接受的最大请求长度。
关于aspnet:MaxJsonDeserializerMembers的解释,参考微软官方文档 asp.NET appSettings Element,和官方关于HttpRuntimeSection.MaxRequestLength属性的解释,以及javascriptSerializer文档。
我的理解是:
HttpRuntimeSection.MaxRequestLength属性对各种形式的输入流(文件流、json等)作一个统一的最大值限定;
aspnet:MaxJsonDeserializerMembers配置在上述属性的基础上对Json形式的请求做了进一步的限制,更小的默认配置帮助开发人员简化请求数据以保证更高的响应速度
官方所述将aspnet:MaxJsonDeserializerMembers设置为太大的数字可能会带来安全风险(Setting this attribute to too large a number can pose a security risk.),但是并没有指明到底是什么样的安全风险。
————————————————
版权声明:本文为CSDN博主「iTheoChan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/iTheoChan/article/details/103068111
备注:亲测前台向后台传递json对象的最大数量限制是2M
<add key="aspnet:MaxJsonDeserializerMembers" value="10000000" />即使value在增加10倍,也是2M限制
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483644"/>
</webServices>
</scripting>
</system.web.extensions>
以上是关于解决.NETMVC(ajax)Json请求太大,无法反序列化(The JSON request was too large to be deserialized)问题的主要内容,如果未能解决你的问题,请参考以下文章
JSON 参数自动。当 ajax 请求向 MVC 操作方法发出时转换为小写?