You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Ajax发送大列表时触发net::ERR_HTTP2_PROTOCOL_ERROR

解决方案建议

1. 改用POST请求(推荐)

问题根源是GET请求的URL长度有限制,当列表条目过多时,序列化后的JSON字符串会超出浏览器或服务器允许的最大URL长度,导致协议错误。POST请求将数据放在请求体中,不受此限制。

修改视图Ajax代码:

// 循环构建shippingArray逻辑不变
var url = '@Url.Action("XXXX","XXXXX")';
$.ajax({
  url: url,
  type: "POST", // 改为POST请求
  contentType: "application/json", // 指定请求内容为JSON
  datatype: "JSON",
  async: true,
  data: JSON.stringify(shippingArray), // 直接传递序列化后的数组
  success: function () {
    // 成功回调逻辑
  },
  error: function(xhr, status, error) {
    // 可添加错误处理
    console.error(error);
  }
});       

修改控制器代码:

首先定义对应的数据模型类(替代直接接收字符串,更规范易维护):

public class ShippingItem
{
    public string ProductId { get; set; }
    public string ColorId { get; set; }
    public string ShippingId { get; set; } // 注意修正原代码中的拼写错误ShippigId
    public int Count { get; set; }
}

然后更新控制器方法,添加[HttpPost]特性并通过[FromBody]绑定列表:

[HttpPost]
public async Task<bool> ShippingFinishDeleteItem([FromBody] List<ShippingItem> items)
{
    // 处理传入的items列表逻辑
    return await Task.FromResult(true);
}

2. 调整GET请求的URL长度限制(不推荐)

如果必须使用GET请求,可以修改服务器端的最大URL长度配置,但浏览器自身也有URL长度限制(如Chrome约8KB),因此仅适用于数据量不是特别大的场景。

Kestrel服务器配置(Program.cs):

builder.WebHost.ConfigureKestrel(options =>
{
    // 调整最大请求行大小,单位为字节,根据需求设置
    options.Limits.MaxRequestLineSize = 65536;
});

HttpSys服务器配置(Program.cs):

builder.Services.Configure<HttpSysOptions>(options =>
{
    options.MaxRequestLineSize = 65536;
});

3. 修正拼写错误

原代码中ShippigId存在拼写错误,建议修正为ShippingId,避免后续模型绑定或业务逻辑中出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:30:48