Azure .net 5 独立函数:使用中间件捕获异常
Azure .net 5 isolated functions: Using middleware to catch exceptions
正如标题所说,我正在尝试处理我的 Azure 函数中间件中的异常。根据 some articles, but I've not managed to make their code work for me. I've also checked the docs 应该是可能的,但是没有处理异常处理。
我的代码(也在 Github 上):
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 函数中间件中实现异常处理,我 missing/doing 错了什么?
提前致谢。
感谢 Andy 的建议,我们认为该问题已根据评论中的讨论得到解决,因此我们将上述评论转为此主题的答案以帮助其他社区成员。
您可能已经看到,问题是您使用的是过时版本 Microsoft.Azure.Functions.Worker 从 Nuget 包管理器更新到最新版本解决了您的问题。
正如标题所说,我正在尝试处理我的 Azure 函数中间件中的异常。根据 some articles, but I've not managed to make their code work for me. I've also checked the docs 应该是可能的,但是没有处理异常处理。
我的代码(也在 Github 上):
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 函数中间件中实现异常处理,我 missing/doing 错了什么?
提前致谢。
感谢 Andy 的建议,我们认为该问题已根据评论中的讨论得到解决,因此我们将上述评论转为此主题的答案以帮助其他社区成员。
您可能已经看到,问题是您使用的是过时版本 Microsoft.Azure.Functions.Worker 从 Nuget 包管理器更新到最新版本解决了您的问题。