c# - Azure .net 5隔离函数: Using middleware to catch exceptions

标签 c# azure function middleware

正如标题所示,我正在尝试处理 Azure 函数中间件中的异常。根据some应该是可以的articles ,但我还没有设法让他们的代码为我工作。我还检查过the docs但这并没有处理异常处理。

我的代码:

Program.cs:

using Microsoft.Extensions.Hosting;

namespace MiddleWareTest
{
    public class Program
    {
        public static void Main()
        {
            var host = new HostBuilder()
                .ConfigureFunctionsWorkerDefaults(
                    builder =>
                    {
                        builder.UseMiddleware<ExceptionLoggingMiddleware>();
                    }
                )
                .Build();

            host.Run();
        }
    }
}

ExceptionLoggingMiddleware.cs:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Middleware;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;

namespace MiddleWareTest
{
    public class ExceptionLoggingMiddleware : IFunctionsWorkerMiddleware
    {
        public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
        {
            try
            {
                await next(context);
            }
            catch (Exception ex)
            {
                var logger = context.GetLogger(context.FunctionDefinition.Name);
                logger.LogError("Unexpected Error in {0}: {1}", context.FunctionDefinition.Name, ex.Message);
            }
        }
    }
}

Function1.cs

using System;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;

namespace MiddleWareTest
{
    public class Function1
    {
        [Function("Function1")]
        public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
            FunctionContext context)
        {
            throw new Exception("yo");
        }
    }
}

据我了解,这段代码应该足以处理异常,但每当我执行 Function1 时,异常不会被我的中间件处理,而是未被捕获。

我的问题:

为了在 Azure Functions 中间件中实现异常处理,我遗漏/做错了什么?

提前致谢。

最佳答案

谢谢Andy对于您的建议,我们相信通过评论中的讨论,该问题已得到解决,因此我们将上述评论转变为该帖子的答案,以帮助其他社区成员。

正如您可能已经看到的,问题是您使用的是过时版本的 Microsoft.Azure.Functions.Worker从 Nuget 包管理器更新到最新版本解决了您的问题。

关于c# - Azure .net 5隔离函数: Using middleware to catch exceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69855276/

相关文章:

javascript参数和范围

c# - MVC DropDownListFor 不从模型中选择值

c# - 如何测试依赖于显示模板的代码?

c# - ASP.NET MVC - 无法在对象中插入重复的键行

azure - 应用洞察 由于表存储并发异常导致依赖失败

azure - 如何使用网络 RP(RP 服务主体名称)设置 AzureRmKeyVaultAccessPolicy?

azure - 为什么有 2 种 AppFabric?

JavaScript 如果答案正确,则生成新字符串

C# ObservableCollection 添加报错

function - v-model vue 3中的参数函数