gpt4 book ai didi

rest - 如何允许 POST 到 MVC5 Controller 以获取大量数据。

转载 作者:行者123 更新时间:2023-12-01 06:46:30 25 4
gpt4 key购买 nike

我已经看到一些帖子解决了这个问题或类似于这个问题的请求或 GET。我没有从服务器获取数据的问题,它仅在 POST 上。

我得到的错误是

JSON 请求太大,无法反序列化。

或者

使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了 maxJsonLength 属性上设置的值。参数名称:输入

我无法始终如一地确定哪些操作会导致哪些错误,但主要是后者。

为了获取 MaxJsonSize 值的值,在 Controller 的 Index 方法上,我获取此数据并将其转储到 View 包中以写入客户端的控制台。每次以 10k (102400) 返回。

如果我减小数据包大小,并且仍然像以前一样进行序列化,则不会出现任何错误。

在 fiddler 中,我可以检查包,并且所有 JSON 都可以在 fiddler 中反序列化,所以我在 JSON 中没有看到问题。此外,如果我 console.log(data) chrome 也没有发现任何问题。

Controller 中的 VM 对于 POST 和 GET 是相同的。除了 POST 的数据比 GET 多。为了测试这一点,我从服务器获得了一个巨大的数据集;
所有 50 个州的 GeoJSON 数据。结果如下。
GET 内容长度: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 数据,导致服务器上的不必要的工作等。我想如果我只需要获取一次那就是从效率的角度来看是最好的。

最佳答案

我也为此苦苦挣扎,尽管有几个 SO 答案看起来很相关,但我在 web.config 中所做的任何更改都没有帮助。他们帮助返回大型 JSON 数据,但大型 JSON 帖子一直失败。最后我发现了这个:
increase maxJsonLength for JSON POST并在那里使用了解决方案,它对我有用。

从那里引用:

the MVC json serializer does not look at the webconfig to get the max length (thats for asp.net web services). you need to use your own serializer. you override ExecuteResult and supply you own json serializer. to override the input, create a new JsonValueProviderFactory, then override ValueProvider in the controller to return your new json factory when its a json request.

关于rest - 如何允许 POST 到 MVC5 Controller 以获取大量数据。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21399686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com