代码之家  ›  专栏  ›  技术社区  ›  AsValeO

具有多个参数的ASP.NET核心Web API控制器操作

  •  1
  • AsValeO  · 技术社区  · 8 年前

    我有一个返回 List<Car> 基于查询参数。

    [HttpPost("cars")]
    public async Task<List<Car>> GetCars([FromBody] CarParams par)
    {
        //...
    }
    

    参数按记录类型分组 CarParams . 大约有20个参数:

    public class CarParams
    {
        public string EngineType { get; set; }
        public int WheelsCount { get; set; }
        /// ... 20 params
        public bool IsTruck { get; set; }
    }
    

    我需要将此方法从post改为get,因为我想对此类请求使用服务器端缓存。

    我应该创建一个包含20个参数的控制器方法吗?

    [HttpGet("cars")]
    public async Task<List<Car>> GetCars(string engineType, 
                                          int wheelsCount, 
                                      /*...20 params?...*/
                                             bool isTruck)
    {
        //...
    }
    

    如果是这样的话:有没有办法为客户端应用程序自动生成如此复杂的url?

    2 回复  |  直到 8 年前
        1
  •  4
  •   Nkosi    8 年前

    你可以保留这个模型。更新操作的模型绑定器,以便它知道在哪里查找模型数据。

    使用 [FromQuery] 指定要应用的确切绑定源。

    [HttpGet("cars")]
    [Produces(typeof(List<Car>))]
    public async Task<IActionResult> GetCars([FromQuery] CarParams parameters) {
    
        //...
    
        return Ok(data);
    }
    

    参考文献 Model Binding in ASP.NET Core

        2
  •  1
  •   Giorgi Chkhikvadze    8 年前

    只是改变 [FromBody] 属性 [FromUrl]

    推荐文章