One of the (many) annoyances we bumped into when rewriting our (huge) app from .NET Framework to .NET Core was the inability to handle exceptions globally both via an error page and some exception handling code.
See, .NET 5 has app.UseExceptionHandler()
and the way you use it is either via error page (and extracting the actual error object on that page):
app.UseExceptionHandler("/Error"); //error handling page
OR use the exception handling lambda:
app.UseExceptionHandler(errorApp => //error handling lambda
{
errorApp.Run(async context =>
{
var exceptionHandlerPathFeature =
context.Features.Get<IExceptionHandlerPathFeature>;();
var exception = exceptionHandlerPathFeature?.Error;
//do something with the exception
});
});
But what if you want to do both - show an error page and use a lambda to process the exception (for example, to send an error email)? Preferably without the bulky context.Features.Get<ExceptionHandlerPathFeature>
? This is how:
app.UseExceptionHandler("/Error");
app.Use(async (context, next) => //add middleware
{
try
{
await next.Invoke(); //run next middleware code
}
catch (Exception ex)
{
//do something
throw; //re-throw so it's caught by the upper "/Error"
}
});
Top comments (0)