.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.MvcNuGet包版本未适配.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.MvcNuGet包至支持.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
相关产品推荐
相关产品推荐

