ASP.NET Core 3.0 - CreatedAtRoute - ни один маршрут не соответствует предоставленным значениям - PullRequest
2 голосов
/ 01 октября 2019

После обновления до ASP.NET Core 3.0 с 2.2, No route matches the supplied values появилось сразу после выполнения CreateAsync. Это вызвано CreatedAtAction. Я попытался установить атрибут GetByIdAsync на [HttpGet("{id}", Name = "Get")], но это не сработало. Я проверил другие связанные темы, но мой код выглядит нормально для меня.

// GET: api/Bots/5
[HttpGet("{id}")]
public async Task<ActionResult<BotCreateUpdateDto>> GetByIdAsync([FromRoute] int id)
{
    var bot = await _botService.GetByIdAsync(id);

    if (bot == null)
    {
        return NotFound();
    }

    return Ok(_mapper.Map<BotCreateUpdateDto>(bot));
}

// POST: api/Bots
[HttpPost]
public async Task<ActionResult<BotCreateUpdateDto>> CreateAsync([FromBody] BotCreateUpdateDto botDto)
{
    var cryptoPair = await _botService.GetCryptoPairBySymbolAsync(botDto.Symbol);

    if (cryptoPair == null)
    {
        return BadRequest(new { Error = "Invalid crypto pair." });
    }

    var timeInterval = await _botService.GetTimeIntervalByIntervalAsync(botDto.Interval);

    if (timeInterval == null)
    {
        return BadRequest(new { Error = "Invalid time interval." });
    }

    var bot = new Bot
    {
        Name = botDto.Name,
        Status = botDto.Status,
        CryptoPairId = cryptoPair.Id,
        TimeIntervalId = timeInterval.Id
    };

    try
    {
        await _botService.CreateAsync(bot);
    }
    catch (Exception ex)
    {
        return BadRequest(new { Error = ex.InnerException.Message });
    }

    return CreatedAtAction(nameof(GetByIdAsync), new { id = bot.Id }, _mapper.Map<BotCreateUpdateDto>(bot));
}

1 Ответ

7 голосов
/ 01 октября 2019

У меня была такая же проблема. Я только изменил endpoints.MapControllers(); на endpoints.MapDefaultControllerRoute();. Первый не указывает никаких маршрутов, а второй устанавливает маршрут по умолчанию.

app.UseEndpoints(endpoints =>
{
    endpoints.MapDefaultControllerRoute();
});
...