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

.NET Core 7中DataSourceRequest绑定返回空值问题排查求助

.NET Core 7中DataSourceRequest绑定始终为空的原因及排查方法

问题描述

将DataSourceRequest对象传入.NET Core 7 Web服务时,请求查询字符串为page=1&pageSize=10,但无论使用GET还是POST方法,该对象始终返回空值。此功能在.NET 3.1中可正常运行,相关控制器代码如下:

[Authorize]
[Route("age{tenantId}/api/[controller]/{action=Index}")]
[ApiContrpoller]
public class BillingContractsController : ControllerBase
{
    [HttpPost]
    public async Task<IActionResult> GetBillingContracts(DataSourceRequest request)
    {

    }
}

可能的原因

  • 模型绑定规则变更:.NET Core 3.1到7.0之间,ASP.NET Core的复杂类型模型绑定默认行为发生调整。DataSourceRequest作为复杂类型,在.NET 3.1中可自动从查询字符串绑定,但.NET 7中需显式指定绑定来源。
  • Kendo包兼容性问题:使用的Kendo.Mvc NuGet包版本未适配.NET 7,或未在项目中正确配置Kendo服务(如services.AddKendo()),导致其提供的模型绑定器无法正常工作。
  • 控制器特性错误:代码中ApiContrpoller为拼写错误(正确应为ApiController),该错误会使Api控制器的自动模型绑定特性失效;同时路由age{tenantId}缺少斜杠,应为age/{tenantId},可能导致路由匹配异常,影响参数传递。
  • POST请求绑定来源不匹配:POST请求默认从请求体绑定复杂类型,但当前参数通过查询字符串传递,未显式指定[FromQuery]时,.NET 7无法从查询字符串读取参数,导致绑定为空。

排查方法

  • 修正控制器特性错误:将ApiContrpoller改为ApiController,修复路由格式为Route("age/{tenantId}/api/[controller]/{action=Index}"),确保路由匹配和Api控制器特性正常生效。
  • 显式指定绑定来源:在DataSourceRequest参数上添加[FromQuery]特性,强制从查询字符串绑定参数:
    public async Task<IActionResult> GetBillingContracts([FromQuery] DataSourceRequest request)
    
  • 更新并配置Kendo包:升级Kendo.Mvc NuGet包至支持.NET 7的最新版本,同时在Program.cs中添加Kendo服务配置:
    builder.Services.AddKendo();
    
  • 检查模型绑定状态:在控制器方法中添加ModelState.IsValid检查,通过ModelState.Errors获取绑定失败的具体错误信息;或启用ASP.NET Core的详细日志,跟踪模型绑定的全过程。
  • 对比版本差异:查阅官方文档,明确.NET Core 3.1到7.0中模型绑定的具体变更点,针对性调整代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:35:59