向ASP.NET MVC发送大型JSON对象

10

我正在使用 KnockoutJS 的映射插件将我的模型转换为 Knockout 对象。但是在将大的 JSON 对象发送回服务器时,我遇到了问题。我的 Ajax 请求如下:

$.ajax({
    url: "/home/DoStuff",
    type: "POST",
    data: JSON.stringify({ deal: ko.toJS(myObjectViewModel) }),
    contentType: "application/json",
    dataType: "json",
    success: function (result) {
        console.log(result);
    },
    error: function (xhr, status, message) {
        console.log(xhr);
    }
});
执行这个脚本从未触发控制器中的DoStuff动作。当我使用Firebug进行检查时,POST请求一直在旋转。在Firebug的Net选项卡中,它说Post Body是159.9 KB,Total Sent是165.1 KB(包括头信息)。如果已发送,为什么它没有命中我的代码断点?
但是,当我发送myObjectViewModel的一个属性时,它可以成功地进行POST并且一切都很顺利。所以我认为问题出在要发布的数据大小上。因此,我尝试增加了maxJsonLength的值。
<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2147483644"></jsonSerialization>
        </webServices>
    </scripting>
</system.web.extensions>

这并没有帮助。

我还应该做些什么吗?

4个回答

12

我猜我的对象超过了ASP.NET允许反序列化的最大成员数。我添加了以下内容来增加它,并且它起作用了。

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>

更新:事实上,还有更多的问题,因为当我让它工作后,最终它会停止工作,似乎没有原因。Firebug再次显示帖子只是旋转而没有触发后端代码。只有在关闭Firefox、杀死IIS Express进程和关闭Visual Studio之后,帖子才能再次运行。但关闭VS似乎是关键。重新使其工作后,改变代码并重新运行应用程序会导致问题再次出现。当问题出现时,即使是硬刷新也无法加载页面,它只会一直旋转。只有在我杀死IIS Express进程并从VS重新启动后,页面才会重新加载。

因此,我放弃了IIS Express,改用我的机器上的完整版IIS。看起来这解决了问题。每次发布大json数据,都可以成功通过... 即使更改代码并重新编译也是如此。

似乎IIS Express可以处理小量的json发布,但在大量数据上表现欠佳。我没有进行足够充分的测试来100%确认这一点,但我知道完整版IIS的性能更可靠。我还未测试VS的内部Web服务器。

环境:Windows 8,Visual Studio 2012 Update 3


4
我正在传递一个包含近1,500万个字符的大JSON数据到我的控制器中,通过web.config文件进行以下更改:
<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="2147483644" />
</appSettings>

这对我非常有效......

相关的技术内容。

3

您可能需要提高通用的最大请求长度(以千字节为单位,例如1GB)

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="1048576" />
  </system.web>
</configuration>

如果你正在使用IIS 7,可能需要增加max content length(以字节为单位,例如1GB)

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
  </security>
</system.webServer>

我正在使用IIS Express。谢谢,我尝试了两种方法,但仍然无法连接到服务器。 - nthpixel

1

我也遇到了从客户端向服务器控制器动作发布大型模型对象数据(JSON)的问题。将下面的设置添加到配置中可以正常运行。谢谢。

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接