ASP.NET 没有 HTTP 动词的核心错误处理程序抛出 Swashbuckle 异常

ASP.NET Core error handler without HTTP verb throws Swashbuckle exception

docs 中用于错误处理的是这样的:

Warning
Don't mark the error handler action method with HTTP method attributes, such as HttpGet. Explicit verbs prevent some requests from reaching the action method.

所以它推荐这个:

[ApiController]
public class ErrorController : ControllerBase
{
    //[HttpGet]           <-- docs say not to do this
    [Route("/error")]
    public IActionResult Error() => Problem();
}

然而,当我遵循该建议(而不是 [HttpGet("/error")])时,我从 Swashbuckle 得到了这个错误:

Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException: Ambiguous HTTP method for action - ErrorController.Error. Actions require an explicit HttpMethod binding for Swagger/OpenAPI 3.0

显然,当我包含动词时,它起作用了。

有人可以在文档中解释该建议背后的原因吗?

文档中建议的原因是在发生错误时允许任何类型的 HTTP 请求到达错误处理程序。例如,如果您将其标记为 [HttpGet],它将无法处理 POST 请求中的错误。

为了让它与 Swagger 一起玩得很好,你可以用这个属性标记控制器(甚至是特定的动作): [ApiExplorerSettings(IgnoreApi = true)]

这将导致 Swashbuckle 不为其生成元数据并且不在 Swagger 中显示它 UI。