Car*_*mas 18 c# asp.net asp.net-mvc model-binding asp.net-core
我试图使用从查询参数到对象的模型绑定进行搜索.
我的搜索对象是
[DataContract]
public class Criteria
{
[DataMember(Name = "first_name")]
public string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器有以下操作
[Route("users")]
public class UserController : Controller
{
[HttpGet("search")]
public IActionResult Search([FromQuery] Criteria criteria)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
当我按如下方式调用端点.../users/search?first_name=dave时,控制器操作的criteria属性为null.但是,我可以将端点称为蛇案例.../users/search?firstName=dave,而criteria属性包含属性值.在这种情况下,模型绑定已经起作用,但是当我使用snake_case时却没有.
如何在模型绑定中使用snake_case?
Car*_*mas 32
您需要[FromQuery]单独向模型属性添加属性
public class Criteria
{
[FromQuery(Name = "first_name")]
public string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
pey*_*our 14
.net core 2.1、2.2和3.0的解决方案
或者没有属性,您可以做类似我认为更干净的事情(当然,如果模型属性与查询参数相同)。
同时,我在.net core 2.1、2.2和3.0预览版5&6中使用了它。
public async Task<IActionResult> Get([FromQuery]ReportQueryModel queryModel)
{
}
Run Code Online (Sandbox Code Playgroud)
对于像我这样从搜索引擎来到这里的人:
使其在 asp.net core 3.1+ 上运行
public async Task<IActionResult> Get([FromQuery] RequestDto request);
public class RequestDto
{
[FromQuery(Name = "otherName")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
将 json 属性读otherName入RequestDto.Name所以基本上你必须FromQuery在 2 个地方使用。以上答案恕我直言,对于asp.net框架中已经提供的这么简单的东西来说太复杂了。