aspnet request was too large to be deserialized

目前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的 节点下配置
最大值按需求设置

(2)在配置文件Web.config根节点下设置Json最大长度






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

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

你可能感兴趣的:(aspnet request was too large to be deserialized)