我已经看到几个帖子解决了这个问题,或类似于此问题的请求或GET。我没有遇到这个问题从服务器获取数据,它只在POST上。
我得到的错误是
JSON请求太大而无法反序列化。
或
使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过maxJsonLength属性上设置的值。参数名称:输入
我无法一致地确定哪些操作导致哪个错误,但主要是后者。
为了获取MaxJsonSize值的值,在控制器的Index方法中,我获取此数据并将其转储到viewbag中以写入客户端的控制台。每次以10k(102400)回复。
如果我减少了数据包大小,并且仍然像以前一样序列化,那么我没有错误。
在fiddler中,我可以检查包,并且所有JSON都可以在fiddler中反序列化,所以我在JSON中没有看到问题。另外,如果我console.log(数据)chrome也没有遇到任何问题。
控制器中的VM对于POST和GET都是相同的。除了例外,POST的数据多于GET。为了测试这个,我从服务器获得了一个庞大的数据集;
所有50个州的GeoJSON数据。以下是结果。
获取内容长度:3229309返回200
POST内容长度:2975244返回500
在此方案中POST失败并返回先前列出的第二个错误。
我只是最低限度地改变了数据(一个字符串)并且不知道为什么当它被发送回它的较小时,但是GET和POST的JSON几乎相同。
我尝试过更改web.config文件:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483644"/>
</webServices>
</scripting>
</system.web.extensions>
我刚刚在
之前将其添加到配置文件的末尾我还在Settings.config中添加了一个参数
<add key="aspnet:MaxJsonDeserializerMembers" value="2147483644" />
我还验证了此参数作为IIS中应用程序设置的一部分加载。
我还可以尝试更改其他内容以允许在POST中发送这些大型数据集。
作为最后的手段,我打算从POST中提取所有GeoJSON数据。然而,当用户导航回来并且他们没有改变他们映射的内容时,我们必须再次找到所有GeoJSON数据,导致服务器上的过度工作等。我想如果我只需要获取它一次那将是从效率的角度来看最好。
答案 0 :(得分:1)
我也在努力解决这个问题,我在web.config中没有改变任何帮助,尽管有几个SO答案看起来很相关。他们帮助返回大型JSON数据,但是大型JSON帖子仍然失败。最后我发现了这个: increase maxJsonLength for JSON POST并在那里使用了解决方案,它对我有用。
从那里引用:
MVC json序列化程序不会查看webconfig以获取最大长度(对于asp.net Web服务而言)。你需要使用自己的序列化器。你重写ExecuteResult并提供自己的json序列化程序。要覆盖输入,创建一个新的JsonValueProviderFactory,然后覆盖控制器中的ValueProvider,以便在json请求时返回新的json工厂。