Я пытаюсь получить 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);
}
Однако мне не очень нравится этот способ, так как он дублирует код на нескольких контроллерах, а список закодированных маршрутов необходимо обновлять каждый раз, когда в контроллере создается новое действие.
Есть ли более чистое решение для обработки маршрутов так, как я хочу? Например, использовать атрибуты или фильтры?