You need to enable JavaScript to run this app. ASP.NET MVC 仅当返回超过25个元素的模型时出现浏览器连接重置错误
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC 仅当返回超过25个元素的模型时出现浏览器连接重置错误

对应问题的排查与修复方案

你遇到的阈值现象(刚好25个条目触发连接重置)和之前调整的JSON序列化配置无效,核心原因和普通的响应大小限制并不完全一致,按优先级排查调整即可解决:

核心触发原因定位

  • 你返回的是Razor引擎渲染的HTML局部视图,和maxJsonLength配置完全无关,所以之前调整的system.web.extensions节点配置不生效是正常的。
  • 刚好卡在25个条目的触发阈值,对应ASP.NET框架默认的MaxHttpCollectionKeys限制:该参数默认值为100,而你每渲染一个带Ajax.BeginForm的列表项,就会生成至少4个表单键值(防伪标记、视图状态隐藏域、列表项自身的HiddenFor字段等),25个条目累计的键值数量刚好触碰到100的默认上限,超过阈值后服务器会直接中断TCP响应流,表现为浏览器端的「连接已重置」提示。
  • 附加问题:你的列表项局部视图中,静态写死了<div id="ingredientsListitem">作为容器ID,渲染25个条目后会产生大量重复DOM ID,会进一步加剧视图状态字段的异常累计,提前触发错误。

具体修复调整

  • 调整web.config中的框架键值限制,匹配长列表的表单渲染需求:
    <configuration>
      <appSettings>
        <!-- 放宽HTTP请求键值对上限,默认100的限制刚好在25个嵌套表单时触发 -->
        <add key="aspnet:MaxHttpCollectionKeys" value="2000" />
        <add key="aspnet:MaxJsonDeserializerMembers" value="2000" />
      </appSettings>
      <system.web>
        <!-- 放宽请求大小、超时限制,覆盖传统经典模式的运行环境 -->
        <httpRuntime maxRequestLength="102400" executionTimeout="3600" />
      </system.web>
      <system.webServer>
        <security>
          <!-- 放宽IIS集成模式下的请求内容长度限制 -->
          <requestFiltering>
            <requestLimits maxAllowedContentLength="104857600" />
          </requestFiltering>
        </security>
      </system.webServer>
    </configuration>
    
  • 修复局部视图的重复ID问题,把列表项的静态容器ID替换为动态值:
    // 将原来写死的id="ingredientsListitem"
    // 替换为动态绑定的唯一id,避免重复DOM触发视图状态校验异常
    <div id="@(Model.ContainerDiv + "_RootItem")" class="yui3-g ingredientsListitem">
    
  • 优化表单结构:不要在每个列表项内部嵌套独立的Ajax表单,把Ajax表单提升到列表外层,所有列表项作为表单内部元素,可大幅减少重复的隐藏域标记,降低请求键值累计速度。

临时验证方法:先在全局应用的错误捕获模块(Global.asax的Application_Error事件)中加入异常日志输出,记录所有未捕获的错误,不需要等连接重置,就能直接看到真实的报错信息,避免盲改配置。

内容的提问来源于stack exchange,提问作者Alberto Montellano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 05:36:04