Я пытаюсь получить ошибку 405, если указан действительный маршрут, но метод HTTP не найден. В настоящее время приложение возвращает ошибку 404, поскольку для функции требуется соответствие маршрута и метода (ожидаемое поведение в MVC).
[HttpGet("api/action")]
public IActionResult ActionGet()
{
// code
}
[HttpPost("api/action")]
public IActionResult ActionPost()
{
//code
}
В этом примере, если я выполняю запрос DELETE
или PUT
, он не будет направлять ни одну из этих функций и просто вернет 404.
Мое текущее решение - создать функцию в каждом контроллере, в котором все маршруты жестко запрограммированы для перехвата запроса независимо от того, какой метод HTTP используется. Тогда это просто выдаст ошибку 405.
[Route("api/action", Order = 2)]
public IActionResult Handle405()
{
return StatusCode(405);
}
Однако мне этот способ не очень нравится, поскольку он дублирует код на нескольких контроллерах, а жестко запрограммированный список маршрутов необходимо обновлять каждый раз, когда в контроллере создается новое действие.
Есть ли более чистое решение для обработки маршрутов так, как я хочу? Например, с использованием атрибутов или фильтров?