在MVC Core中按查询字符串动态过滤吗?

时间:2019-02-23 01:44:30

标签: c# query-string asp.net-core-webapi

我有这样的get方法...

[HttpGet]
public async Task<ActionResult<IEnumerable<Customer>>> GetCustomers()
{
    var queryString = HttpContext.Request.Query;
    return await _context.Customers.Take(7).ToListAsync();
}

,我想传递这样的查询字符串:

https://localhost:44315/api/customer?param1=1&param2=String Value

我想这样做而不必在我的参数列表中声明每个参数。例如

[HttpGet]
public async Task<ActionResult<IEnumerable<Customer>>> GetCustomers(int param1, string param2)
{
    var queryString = HttpContext.Request.Query;
    return await _context.Customers.Take(7).ToListAsync();
}

我想避免这样做,因为我的课有几十个参数。我知道您可以使用[FromQuery] Customer customer进行绑定,但是我认为这并不是我想要的。

有没有办法动态地做到这一点?

2 个答案:

答案 0 :(得分:0)

如果只想通过HttpContext访问查询参数而忘记了操作参数,则可以完全省略这些参数。 ASP.NET Core不会将查询字符串作为操作路由的一部分进行评估(这也意味着除非通过属性路由指定其他路由,否则您无法基于查询参数创建重载。)

答案 1 :(得分:0)

我最终做了这样的事情

exit(MY_ERROR_CODE);

然后在单独的类

   //GET: api/customer
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Customer>>> GetCustomers()
    {
        var queryParams = HttpContext.Request.Query;
        var collection = _context.Customers.FilterByQueryParams(queryParams);
        return await Task.FromResult(collection.ToList());
    }

这里还有很多事情要做,但是我认为这是一个好的开始。