почему параметр действия преобразуется в строку запроса в asp net core

#api #asp.net-core

#API #asp.net-core

Вопрос:

У меня есть этот метод в ASP.NET Ядро:

    [HttpDelete("id:int")]
    public async Task<IActionResult> Delelte(int id)
    {
       // do sth
    }
  

Теперь, когда я вызываю этот API через swagger, сгенерированный URL-адрес :

 https://localhost:44357/api/mycontroller/id:int?id=2
  

Я ожидал, что у меня будет URL-адрес без строки запроса, например api/mycontroller/2

Проблема в том, что я хочу вызвать этот API из кода, и в коде я называю это так api/mycontroller/2 , но он возвращает 404

Ответ №1:

 [HttpDelete("id:int")]
  

Должно быть

 [HttpDelete("{id:int}")]
  

Параметры заключены в угловые скобки {} с необязательными ограничениями, такими int как. Все, что находится за пределами этого, считается статической частью URL-адреса маршрута.

Смотрите также Маршрутизацию в ASP.NET Ядро

Ответ №2:

Проблема, похоже, связана с тем, как вы изменили свой атрибут HttpDelete.

Попробуйте вместо этого отформатировать его таким образом :

 [HttpDelete("{id}")]