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

C# HTTP触发函数的正确错误处理?,c#,azure,.net-core,azure-functions,C#,Azure,.net Core,Azure Functions,对于HTTP触发的Azure功能v2,正确的错误处理方法是什么?正如本文建议的那样,是否应该捕获所有内部异常,而不抛出任何异常 也就是说,始终使用try-catch将您在函数中所做的每件事都包围起来,如下所示: [FunctionName("DemoHttpFunction")] public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Ro

对于HTTP触发的Azure功能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);
    }
}   
[FunctionName(“DemoHttpFunction”)]
公共静态异步任务运行([HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequest请求,ILogger日志)
{
尝试
{
等待内部消息();
返回新的NoContentResult();
}
捕获(例外情况除外)
{
LogError(例如,“出了问题”);
返回新的StatusCodeResult(500);
}
}   
我看到的缺点是

  • 没有任何错误消息返回给用户<代码>状态代码结果不提供任何重载来提供消息
  • 所有功能的执行都将显示为成功,例如,在登录应用程序洞察中
  • 没有任何错误消息返回给用户<代码>状态代码结果不提供任何重载来提供消息

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

    //...
    
    catch(Exception ex)
    {
        log.LogError(ex, "Something went wrong");
        var model = new { error = "User friendly something went wrong" };
        return new ObjectResult(model) {
            StatusCode = 500
        };
    }
    
    //...
    
    没有任何错误消息返回给用户<代码>状态代码结果不提供任何重载来提供消息

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

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

    对于其他函数触发器,在函数执行期间发生错误时,没有内置的重试。为了防止在函数中发生错误时丢失触发器信息,建议在函数代码中使用try-catch块来捕获任何错误。发生错误时,将触发器传递到函数中的信息写入一个特殊的“中毒”消息队列。此方法与Blob存储触发器使用的方法相同。
    谢谢,但不是重试。更确切地说,如果存在一些内部异常,我想告诉打电话的人,我该怎么做
    对于其他函数触发器,在函数执行期间发生错误时,没有内置的重试。为了防止在函数中发生错误时丢失触发器信息,建议在函数代码中使用try-catch块来捕获任何错误。发生错误时,将触发器传递到函数中的信息写入一个特殊的“中毒”消息队列。此方法与Blob存储触发器使用的方法相同。
    谢谢,但不是重试。更确切地说,如果有一些内部异常,我想告诉调用者,我该怎么做?谢谢,代码片段很有意义!关于try-catch,正如我在上面的评论中所写的,我的问题不是关于重试。更多关于如何正确记录错误(也记录到appinsights)并将有意义的内容返回到user@silent我正在检查你问题的第二部分,看看是否有一种方法可以插入洞察。但是它应该能够标记从函数返回的服务器错误响应。谢谢,代码片段很有意义!关于try-catch,正如我在上面的评论中所写的,我的问题不是关于重试。更多关于如何正确记录错误(也记录到appinsights)并将有意义的内容返回到user@silent我正在检查你问题的第二部分,看看是否有一种方法可以插入洞察。但是它应该能够标记从函数返回的服务器错误响应。