美文网首页.Net流水账
aspnet request was too large to

aspnet request was too large to

作者: 飞了个鸽_figo | 来源:发表于2018-11-30 18:08 被阅读0次

    目前Web应用前端和后端通信最流行的方式,就是通过Http请求的方式。有时候前端消息体上传的内容很多,对于Asp .net 应用,可能会收到异常System.InvalidOperationException: The JSON request was too large to be deserialized.

    原因:
    (1)MaxJsonDeserializerMembers超长,在asp .net 这个长度默认是1000.它的计算方式是每个字段计数为1,常量数组按数组长度计算。例如一个Json对象数组长度为10,这个对象有8个字段,其他有个字段是整形数组,长度为2,那么它的Members=(8-1+12)10.所以当Post一个对象数组时,需要考虑是否会超长

    (2)消息体超长,asp.net 默认最大为2M

    解决方案
    (1)在配置文件Web.config的 <appSettings>节点下配置<add key="aspnet:MaxJsonDeserializerMembers" value="5000" />。
    最大值按需求设置

    (2)在配置文件Web.config根节点下设置Json最大长度
    <system.web.extensions>
    <scripting>
    <webServices>
    <jsonSerialization maxJsonLength="2147483644"/>
    </webServices>
    </scripting>
    </system.web.extensions>

    如果此方案不生效,可以考虑自定义ValueProviderFactory替换默认的实现
    ValueProviderFactories.Factories.Remove(ValueProviderFactories.Factories.OfType<JsonValueProviderFactory().FirstOrDefault());
    ValueProviderFactories.Factories.Add(new MyJsonDotNetValueProviderFactory());

    后记:
    为什么要设置这些默认的大小。反向考虑一下,如果不设置最大限制,Http请求可能会传入超大容量的消息,服务器压力会剧增。

    相关文章

      网友评论

        本文标题:aspnet request was too large to

        本文链接:https://www.haomeiwen.com/subject/ulzhcqtx.html