Global Exception Handling in .NET 8: Introducing IExceptionHandler

Osama HaiDer
2 min readJul 5, 2024

.NET 8 introduces a new feature called IExceptionHandler that makes it easier to manage exceptions (errors) globally. This feature allows developers to handle known exceptions in one place, simplifying the code and ensuring consistent error handling throughout the application.

What is IExceptionHandler?

The IExceptionHandler interface lets you define custom logic for handling exceptions. Here are some key points:

  • Centralized Handling: You can handle all known exceptions in one place.
  • Custom Logic: You can define how to handle different types of exceptions.
  • Controlled Processing: Handlers can return true to stop further processing or false to let other handlers or default behavior take over.

How to Implement IExceptionHandler

To create a custom exception handler, you need to implement the IExceptionHandler interface. Here’s an example:

using Microsoft.AspNetCore.Diagnostics;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace ErrorHandlingSample
{
public class CustomExceptionHandler : IExceptionHandler
{
private readonly ILogger<CustomExceptionHandler> logger;

public CustomExceptionHandler(ILogger<CustomExceptionHandler> logger)
{
this.logger = logger;
}

public ValueTask<bool> TryHandleAsync(
HttpContext httpContext,
Exception exception,
CancellationToken cancellationToken)
{
var exceptionMessage = exception.Message;
logger.LogError(
"Error Message: {exceptionMessage}, Time of occurrence {time}",
exceptionMessage, DateTime.UtcNow);

// Return false to continue with the default behavior
// - or - return true to signal that this exception is handled
return ValueTask.FromResult(false);
}
}
}

In this example, the CustomExceptionHandler logs the exception details. You can add more logic to handle different types of exceptions as needed.

How to Register IExceptionHandler

To use your custom exception handler, you need to register it in your application. Here’s how you do it:

var builder = WebApplication.CreateBuilder(args);

// Register the custom exception handler
builder.Services.AddExceptionHandler<CustomExceptionHandler>();

var app = builder.Build();

// Use the exception handler middleware
app.UseExceptionHandler(o => { });

app.Run();

This code registers the CustomExceptionHandler and tells the application to use it for handling exceptions.

Conclusion

The IExceptionHandler interface in .NET 8 makes it easier to manage exceptions in a centralized way. By implementing custom exception handlers and registering them, you can ensure consistent and maintainable error handling throughout your application. This improves the overall quality of your code and makes your application more robust.

For more updates and insights, and to connect with me, feel free to follow me on LinkedIn:

🔗 [Connect on LinkedIn]

Let’s stay connected and continue the conversation!

--

--

Osama HaiDer
Osama HaiDer

Written by Osama HaiDer

SSE at TEO International | .Net | Azure | AWS | Web APIs | C#

No responses yet