在我的视图和控制器之间某处不匹配,导致后者接收到一个复杂的对象,该对象充满了空值。
[HttpGet("find")]
[ProducesResponseType(typeof(PagableResults<UserDetails>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[SwaggerOperation("FindUsers")]
public async Task<IActionResult> FindUsers([FromQuery]FindUsersSearchFilter searchFilters)
并且searchFilters对象的定义如下:
public class FindUsersSearchFilter
{
public int? Page { get; set; }
public string Username { get; set; }
public string Firstname { get; set; }
public string Surname { get; set; }
}
View像这样发送查询字符串中的数据(因为它是一个get方法):
/find?SearchFilters.Page=1&SearchFilters.Firstname=foo&SearchFilters.Surname=bar&SearchFilters.Username=
但是,如果您调试控制器操作,则会命中断点,但是该方法接收的FindUsersSearchFilter对于每个属性都具有空值。
我尝试过的事情:
不知下一步去哪里。关于我错了什么建议吗?
请求是错误的。应该是:
/find?Page=1&Firstname=foo&Surname=bar&Username=
[当您为所有属性添加SearchFilters前缀时,绑定引擎很可能会寻找嵌套的属性,例如searchFilters.SearchFilters.FirstName。
因此删除前缀应使其起作用。
如果您确实需要在查询中使用该语法;然后创建另一个这样的类:
public class SearchFilterContainer
{
public FindUsersSearchFilter SearchFilters { get; set; } = new FindUsersSearchFilter();
}
然后像这样将动作作为参数传递给它:
[HttpGet("find")]
[ProducesResponseType(typeof(PagableResults<UserDetails>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[SwaggerOperation("FindUsers")]
public async Task<IActionResult> FindUsers([FromQuery]SearchFilterContainer searchFilters)
然后在控制器内,您可以像这样searchFilters.SearchFilters.FirstName
来访问模型>