多个 get 方法之一来自查询变量。其他无变量

Multiple get methods one from query variable. other without variable

我有问题。我在控制器中有两种方法:

[HttpGet]
public IActionResult GetCompetitors()
{
    var competitors = _competitorRepository.GetAll().ToList();
    return Ok(_mapper.Map<List<CompetitorDTO>>(competitors));
}

我有第二种方法:

[HttpGet]
public IActionResult GetFestivalByPrice([FromQuery] int godina)
{
    if (godina <= 1800 || godina > 2020)
    {
       return BadRequest("godina must between 1800 and 2020");
    }
    var competitors = _competitorRepository.GetAllByBirth(godina);
    if (competitors == null)
    {
        return NotFound();
    }

    return Ok(_mapper.Map<List<CompetitorDTO>>(competitors));
}

第一个应该有路线 api/controllername,第二个应该有路线 api/controllername?godina={somevalue}。我在这段代码中遇到错误,两种方法具有相同的路径。路由必须相同,只有一个带参数,一个不带参数。

如错误所述,不能有两个具有相同路径的方法。

您可以通过在您的第一个方法上添加一个可选的并结合它们的逻辑来解决这个问题。

[HttpGet]
public IActionResult GetCompetitors([FromQuery] int? godina)

我会用这样的东西

[NonAction]  
public IActionResult GetCompetitors()
{
    var competitors = _competitorRepository.GetAll().ToList();
    return Ok(_mapper.Map<List<CompetitorDTO>>(competitors));
}

[HttpGet]
public IActionResult GetFestivalByPrice([FromQuery] int? godina)
{
    if (godina==null) return  GetCompetitors();
    ... your code
}