【发布时间】:2019-11-05 14:49:06
【问题描述】:
我的视图和控制器之间的某个地方不匹配,导致后者接收到一个复杂的对象,其中充满了空值。
[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 对于每个属性都有一个空值。
我尝试过的事情:
- 在控制器操作上绑定(Prefix="SearchFilters")。
- 在控制器操作上绑定("Page,Firstname,Surname,Username")
- 手动更改 URL 以删除前缀并更改大小写
- 正在删除 [FromQuery]
不知道下一步该去哪里。关于我做错了什么有什么建议吗?
【问题讨论】:
-
这种类型的请求通常作为
POST而不是GET更容易。 -
@nurdyguy 是的,但这绝对是一个 GET,因为它是一个搜索功能。复杂对象是传递多个参数的便捷方式。
-
@BobTway 我明白你的意思。这当然可以通过任何一种方式完成,只需 更简单 和 cleaner 作为
POST。
标签: c# asp.net-mvc asp.net-core model-binding