当查询中不存在匹配参数时,FromQuery 字典会镜像所有查询参数
FromQuery dictionary mirrors all query parameters when a matching parameter is not present in query
我有以下 ASP.net 核心 MVC 控制器:
namespace Mugen.API
{
[Route("api")]
public class ApiController : Controller
{
[HttpGet("search")]
public async Task<IActionResult> SearchAsync(
[FromQuery] int skip,
[FromQuery] int pageSize,
[FromQuery] [CanBeNull] string searchTerm,
[FromQuery] [CanBeNull] Dictionary<string, List<string>> filters
)
{
// ...
}
}
}
例如,当我向 url
发出请求时
http://localhost/api/search?skip=0&pageSize=20&filters=
或
http://localhost/api/search?skip=0&pageSize=20&filters[Param][0]=value
参数绑定按预期工作。
但是,如果我没有明确提供 filters
参数,即
http://localhost/api/search?skip=0&pageSize=20
我正在按预期填充所有参数,但字典除外,它获取值
{{"skip": ["0"]}, {"pageSize":["20"]}}
填充在字典中,这不是用户想要的请求。这是在填充其他参数(某种镜像)之外完成的。
我正在使用 .net Core 3.1
和 Microsoft.AspNetCore.Mvc 2.2.0
您可以使用绑定前缀,更改您的代码如下:
[HttpGet("search")]
public async Task<IActionResult> SearchAsync(
[FromQuery] int skip,
[FromQuery] int pageSize,
[FromQuery] string searchTerm,
[FromQuery][Bind(Prefix = "filters")] Dictionary<string, List<string>> filters
)
我有以下 ASP.net 核心 MVC 控制器:
namespace Mugen.API
{
[Route("api")]
public class ApiController : Controller
{
[HttpGet("search")]
public async Task<IActionResult> SearchAsync(
[FromQuery] int skip,
[FromQuery] int pageSize,
[FromQuery] [CanBeNull] string searchTerm,
[FromQuery] [CanBeNull] Dictionary<string, List<string>> filters
)
{
// ...
}
}
}
例如,当我向 url
发出请求时http://localhost/api/search?skip=0&pageSize=20&filters=
或
http://localhost/api/search?skip=0&pageSize=20&filters[Param][0]=value
参数绑定按预期工作。
但是,如果我没有明确提供 filters
参数,即
http://localhost/api/search?skip=0&pageSize=20
我正在按预期填充所有参数,但字典除外,它获取值
{{"skip": ["0"]}, {"pageSize":["20"]}}
填充在字典中,这不是用户想要的请求。这是在填充其他参数(某种镜像)之外完成的。
我正在使用 .net Core 3.1
和 Microsoft.AspNetCore.Mvc 2.2.0
您可以使用绑定前缀,更改您的代码如下:
[HttpGet("search")]
public async Task<IActionResult> SearchAsync(
[FromQuery] int skip,
[FromQuery] int pageSize,
[FromQuery] string searchTerm,
[FromQuery][Bind(Prefix = "filters")] Dictionary<string, List<string>> filters
)