ASP.NET Core WebApi中如何获取Datatables.net传递的search[value]参数
解决方案
你遇到的参数绑定失败问题的核心原因是ASP.NET Core默认模型绑定规则需要和请求参数名完全匹配,search[value]属于带层级的命名格式,直接声明search参数无法匹配到对应的值。你可以选择以下两种方案解决:
方案1:直接指定参数绑定名称(快速适配单个参数)
在[FromQuery]特性中显式指定要绑定的请求参数名即可,不需要修改其他配置:
public IActionResult LoadDatatableData( [FromQuery] int draw, [FromQuery] int start, [FromQuery] int length, // 显式指定绑定search[value]参数 [FromQuery(Name = "search[value]")] string searchValue, // 其余参数按需声明 ) { // 直接使用searchValue即可拿到对应的值 }
方案2:封装请求模型(推荐,适配完整Datatables服务端参数)
Datatables的服务端参数大多是columns[x][xx]、order[x][xx]这种层级命名格式,统一封装成模型类后续维护更方便:
- 先定义搜索参数类
public class DatatableSearch { public string Value { get; set; } public bool Regex { get; set; } }
- 定义完整的Datatables请求参数类
public class DatatableRequest { public int Draw { get; set; } public int Start { get; set; } public int Length { get; set; } public DatatableSearch Search { get; set; } // 可按需扩展排序、列过滤对应的模型类 }
- 控制器方法直接接收模型即可
public IActionResult LoadDatatableData([FromQuery] DatatableRequest request) { // 取搜索值直接调用 request.Search.Value 即可 }
ASP.NET Core的模型绑定器会自动把search[value]参数匹配到Search.Value属性上,不需要额外配置。
注意:你之前使用
[FromHeader]无效是因为该参数属于查询字符串参数,不在请求头中;仅加[FromQuery]不指定Name的话,默认会按参数名匹配,自然找不到对应的值。
内容的提问来源于stack exchange,提问作者Sum1Unknown
相关产品推荐
相关产品推荐

