微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当查询中不存在匹配参数时,FromQuery 字典会反映所有查询参数

如何解决当查询中不存在匹配参数时,FromQuery 字典会反映所有查询参数

我有以下 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&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.1Microsoft.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
    )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。