HTTP 触发函数的正确错误处理?

sil*_*ent 3 c# azure .net-core azure-functions

对 HTTP 触发的 Azure Functions v2 进行错误处理的正确方法是什么?是否应该 - 正如这个答案中所建议的- 所有内部异常都被捕获并且没有任何异常被抛出?

即始终用 try-catch 包围您在函数内所做的所有操作,如下所示:

[FunctionName("DemoHttpFunction")]
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ILogger log)
{
    try
    {
        await InnerDoSomething();
        return new NoContentResult();
    }
    catch(Exception ex)
    {
        log.LogError(ex, "Something went wrong");
        return new StatusCodeResult(500);
    }
}   
Run Code Online (Sandbox Code Playgroud)

我看到的缺点是

  1. 根本没有错误消息返回给用户。StatusCodeResult不提供任何重载来提供消息
  2. 您的函数的所有执行都将显示为成功,例如在 Application Insights 中的日志记录中。

Nko*_*osi 5

根本没有错误消息返回给用户。StatusCodeResult不提供任何重载来提供消息

您可以控制代码。您可以轻松使用包含您所需信息的不同结果。

//...

catch(Exception ex)
{
    log.LogError(ex, "Something went wrong");
    var model = new { error = "User friendly something went wrong" };
    return new ObjectResult(model) {
        StatusCode = 500
    };
}

//...
Run Code Online (Sandbox Code Playgroud)