Действие ASP.Net Core Web API Controller со многими параметрами

У меня есть метод ASP.Net Core Web API Controller, который возвращает 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 ответа

Решение

Вы можете сохранить модель. Обновите связыватель модели действия, чтобы он знал, где искать данные модели.

использование [FromQuery] указать точный источник привязки, который вы хотите применить.

[HttpGet("cars")]
[Produces(typeof(List<Car>))]
public async Task<IActionResult> GetCars([FromQuery] CarParams parameters) {

    //...

    return Ok(data);
}

Связывание эталонной модели в ASP.NET Core

Просто поменяй [FromBody] приписать с [FromUrl]

Другие вопросы по тегам