将查询参数绑定到ASP.NET Core中的模型

我试图使用从查询参数到对象的模型绑定进行搜索。

我的搜索对象是

[DataContract] public class Criteria { [DataMember(Name = "first_name")] public string FirstName { get; set; } } 

我的控制器有以下操作

 [Route("users")] public class UserController : Controller { [HttpGet("search")] public IActionResult Search([FromQuery] Criteria criteria) { ... } } 

当我按如下方式调用端点时.../users/search?first_name=dave控制器操作上的criteria属性为null。 但是,我可以将端点称为蛇案例.../users/search?firstName=dave并且criteria属性包含属性值。 在这种情况下,模型绑定已经起作用,但是当我使用snake_case时却没有。

如何在模型绑定中使用snake_case?

您需要单独将[FromQuery]属性添加到模型属性

 public class Criteria { [FromQuery(Name = "first_name")] public string FirstName { get; set; } } 

或者没有属性你可以做这样的事情,我觉得更清洁(当然,如果模型属性与查询参数相同)。

同时我在.net core 2.1中使用它

 public async Task Get([FromQuery]ReportQueryModel queryModel) { }