Error handling 如何正确地从由事件网格事件触发的Azure函数返回状态/错误代码
我正试图了解如何管理由事件网格事件触发的Azure函数中受控和非受控的结果/故障。我确信我遗漏了一些基本方面,但我真的无法理解可用的Microsoft文档 使用当前用于事件网格触发器的Visual Studio 2019 Azure函数模板,我们得到了类似于以下内容的C#方法:Error handling 如何正确地从由事件网格事件触发的Azure函数返回状态/错误代码,error-handling,azure-functions,azure-eventgrid,Error Handling,Azure Functions,Azure Eventgrid,我正试图了解如何管理由事件网格事件触发的Azure函数中受控和非受控的结果/故障。我确信我遗漏了一些基本方面,但我真的无法理解可用的Microsoft文档 使用当前用于事件网格触发器的Visual Studio 2019 Azure函数模板,我们得到了类似于以下内容的C#方法: [FunctionName("UserCreated")] public static void UserCreated([EventGridTrigger]EventGridEvent evt, ILogger log
[FunctionName("UserCreated")]
public static void UserCreated([EventGridTrigger]EventGridEvent evt, ILogger log)
{
...
}
问题1。从这些方法返回状态和错误代码的正确方法是什么,以便可以重试事件或将事件传递给死信blob?假设我想返回一个Status 400错误请求,因为传入的事件中的自定义数据负载没有达到最新速度。我试过这个:
[FunctionName("UserCreated")]
public static async Task<IActionResult> UserCreated([EventGridTrigger]EventGridEvent evt, ILogger log)
{
...
return new BadRequestObjectResult("ouch");
}
我不理解这个错误,也不知道如何解决它
问题2。我们如何正确地捕获异常并以有序的方式返回它们?假设上面的UserCreated方法要求传入事件具有几个自定义数据点,并且缺少其中一个数据点。例如,我们有:
[JsonObject(ItemRequired = Required.Always)]
private class CustomerAndContactIds
{
public int CustomerId { get; set; }
public int ContactId { get; set; }
}
。。。当我们转换一些缺失的事件数据时,例如ContactID字段,如下所示:
private static T ExtractCustomPayloadFromEvent<T>(EventGridEvent evt)
{
return JObject.FromObject(evt.Data).ToObject<T>();
}
然而,我们得到的一切,例如邮递员:
Exception while executing function: UserCreated
对于那些不了解Azure日志流或Azure Insights的消费者来说,什么样的正确方法可以使其更加清晰?到第1季度:
当前版本的EventGridTrigger函数没有特定的异常对象来处理其包装回HttpStatusCode值。换句话说,azure函数中的任何异常都将在启用时强制执行重试模式
作为解决此问题的一种方法,我们可以使用HttpStatusCode返回值作为订户处理程序的HttpTrigger函数
System.Private.CoreLib: Exception while executing function: UserCreated. Newtonsoft.Json: Required property 'ContactPersonId' not found in JSON. Path ''.
Exception while executing function: UserCreated