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

Kendo UI请求URI过长(414)问题解决方案咨询

解决Kendo UI Grid 414 Request-URI Too Long错误

核心问题原因

你的warehouseCodeList参数包含大量仓库编码,通过GET请求传递时会导致URI长度超过服务器限制,触发414错误。改用POST请求将参数放在请求体中,就能避开URI长度限制。

具体解决方案

1. 调整Kendo DataSource配置,改用POST请求

不要直接修改Grid的私有方法_parameterMap,而是在DataSource的transport中直接配置,确保参数放在请求体里:

// 重新配置你的DataSource
var gridDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: "https://zzzz/Inv/yyy/xxxx/",
            type: "POST", // 关键:设置为POST请求
            contentType: "application/json; charset=utf-8", // 指定请求体为JSON格式
            dataType: "json"
        },
        parameterMap: function(data, type) {
            if (type === "read") {
                // 组装查询参数
                var selectedWarehouse = '';
                $.each(KendoData('mltWarehouse_OnPhysicalCountDefinition').dataItems(), function (index, value) {
                    selectedWarehouse += value.WarehouseCode + ',';
                });
                selectedWarehouse = selectedWarehouse.slice(0, -1);

                var params = {
                    warehouseCodeList: selectedWarehouse,
                    periodDateString: $('#dpcPeriodDate_OnPhysicalCountDefinition').val(),
                    Page: data.page,
                    PageSize: data.pageSize,
                    $inlinecount: "allpages" // 如果需要分页总条数,保留这个参数
                };
                return JSON.stringify(params); // 将参数转为JSON字符串,放入请求体
            }
            // 其他操作(如创建/更新)保持原有逻辑
            if (type !== "read" && data.models) {
                return JSON.stringify({ models: data.models });
            }
            return data;
        }
    },
    schema: {
        data: "Data", // 对应后端返回的数据集字段名,按需调整
        total: "Total" // 对应分页总条数的字段名,按需调整
    },
    pageSize: 50,
    serverPaging: true
});

// 将DataSource绑定到Grid
$("#yourGridId").kendoGrid({
    dataSource: gridDataSource,
    // 其他Grid配置...
});

2. 后端控制器调整(以ASP.NET为例)

需要修改控制器方法,允许POST请求,并从请求体中读取参数:

// 标记为POST请求
[HttpPost]
public ActionResult GetGridData([FromBody] GridRequestParams requestParams)
{
    // 处理参数,查询数据
    var warehouseCodes = requestParams.warehouseCodeList.Split(',');
    var totalCount = // 查询总条数逻辑
    var data = // 分页查询数据逻辑

    // 返回符合Kendo Grid要求的格式
    return Json(new { Data = data, Total = totalCount });
}

// 定义参数接收类
public class GridRequestParams
{
    public string warehouseCodeList { get; set; }
    public string periodDateString { get; set; }
    public int Page { get; set; }
    public int PageSize { get; set; }
}

关键注意事项

  • 移除对kendo.data.transports["odata"].parameterMap的依赖:OData的参数映射默认会生成GET查询字符串,不适合POST场景,需自定义参数处理逻辑。
  • 确保后端支持接收JSON格式的请求体:如果是其他后端语言(如Java/PHP),需要对应配置解析JSON请求体的逻辑。
  • 分页参数保持一致:Page和PageSize参数要和后端分页逻辑对应,确保分页功能正常。

内容的提问来源于stack exchange,提问作者merve şahinoglu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:50:22