• 解决.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>

  • 相关阅读:
    转:基于科大讯飞语音API语音识别开发详解
    转:Netty系列之Netty高性能之道
    转:hadoop知识整理
    转:nginx防DDOS攻击的简单配置
    转:Google论文之一----Bigtable学习翻译
    POJ 2112 Optimal Milking(最大流+二分)
    HDU 4647 Another Graph Game(贪心)
    HDU 4671 Partition(定理题)
    HDU 4648 Magic Pen 6
    HDU 4649 Professor Tian(DP)
  • 原文地址:https://www.cnblogs.com/liuslayer/p/12483776.html
Copyright © 2020-2023  润新知