如何在 API 控制器中抑制和忽略 500 个代码

How can I Suppress and Ignore 500 codes in an API Controller

我有一个非常简单的 c# Web API 控制器,如下所示:

    [HttpGet("api/GameTask/")]
    public async Task<IActionResult> Get()
    {
        // connect to 3rd party API
        var gameTask = await GamerAPI.GetGameTask();
        if (gameTask == null) return NoContent();
        return Ok(gameTask);
    }

这个 API 击中另一个 API(第 3 方)。

出于某种原因,大约有 40% 的时间,第 3 方 API 有时会在浏览器控制台中抛出 500 内部服务器错误。

该错误实际上根本不会影响网站。

所以,现在,我想忽略并抑制这个 API Get 请求可能抛出的所有 500 个错误。

问题是,它从第 3 方取回的对象 API 不包含任何状态代码。

有没有一种方法可以在控制器中检测到 500 代码并抑制错误,这样它就不会将 500 代码发送回浏览器?

谢谢!

尝试Filters.

Exception filters apply global policies to unhandled exceptions that occur before the response body has been written to.

在以下示例中,SupressInternalErrorAttribute 在响应被分派之前捕获所有类型的引发异常。无论抛出什么类型的异常,它都会重写响应内容和状态。

public class SupressInternalErrorAttribute : ExceptionFilterAttribute
{
    public override void OnException(ExceptionContext context)
    {
        context.Result = new ContentResult()
        {
            StatusCode = StatusCodes.Status204NoContent
        };
        base.OnException(context);
    }
}

样本 API 通过 [SupressInternalError] 属性进行注释,此外,只要随机数等于零(扮演问题的第 3 方),它就会抛出 System.DivideByZeroException

    [HttpGet("api/GameTask/")]
    [SupressInternalError]
    public IActionResult Get()
    {
        return Ok(10 / new Random().Next(0, 2));
    }

因此,当随机数为零时,API returns 204 NoContent 而不是 500 InternalServerError,否则 returns 10获得 200 OK 身份。