【问题标题】:FromQuery dictionary mirrors all query parameters when a matching parameter is not present in query当查询中不存在匹配参数时,FromQuery 字典会镜像所有查询参数
【发布时间】:2021-08-27 11:17:28
【问题描述】:

我有以下 ASP.net Core 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&amp;pageSize=20&amp;filters=

http://localhost/api/search?skip=0&amp;pageSize=20&amp;filters[Param][0]=value

参数的绑定按预期工作。

但是,如果我没有明确提供 filters 参数,即

http://localhost/api/search?skip=0&amp;pageSize=20

我正在按预期填充所有参数,但获取值的字典除外

{{"skip": ["0"]}, {"pageSize":["20"]}}

填充在字典中,这不是用户想要的请求。这是在填充其他参数(类似于镜像)的基础上完成的。

我正在使用.net Core 3.1Microsoft.AspNetCore.Mvc 2.2.0

【问题讨论】:

  • 嗨@Mugen,关于这个案例有什么更新吗?

标签: model-view-controller asp.net-core-mvc asp.net-core-3.1 model-binding


【解决方案1】:

你可以使用绑定前缀,修改你的代码如下:

[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
    )

【讨论】:

  • 您是否知道首先要解释此镜像绑定的默认行为?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2018-09-18
  • 2017-12-01
  • 2012-02-09
  • 2010-10-31
相关资源
最近更新 更多