提供有效的路由但未找到HTTP方法时,我试图获取405错误。当前,应用程序返回404s,因为它需要路由和方法都与功能匹配(MVC中的预期行为)。
[HttpGet("api/action")]
public IActionResult ActionGet()
{
// code
}
[HttpPost("api/action")]
public IActionResult ActionPost()
{
//code
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,如果我执行DELETE
或PUT
请求,则它将不会路由到这些函数中的任何一个,而只会返回404。
我当前的解决方案是在每个控制器中创建一个函数,无论使用哪种HTTP方法,该控制器的所有路由都经过硬编码以捕获请求。然后,这只会引发405错误。
[Route("api/action", Order = 2)]
public IActionResult Handle405()
{
return StatusCode(405);
}
Run Code Online (Sandbox Code Playgroud)
但是,我不太喜欢这种方式,因为它会在多个控制器上复制代码,并且每次在控制器中创建新动作时都需要更新硬编码的路由列表。
有没有更清洁的解决方案可以按我想要的方式处理路线?如使用属性或过滤器?