Protecting Your Applications: Error Middlewares

fabrcio_marcondessantos

Fabrício Marcondes Santos

Posted on July 20, 2024

Protecting Your Applications: Error Middlewares

Introduction
Imagine you are driving a car and, suddenly, something unexpected happens. Airbags deploy to protect you and your passengers. Implementing error middlewares in your .NET application is like having those airbags: they protect your application when something goes wrong, ensuring resilience and security.

In today’s post, we’ll explore how to implement error middlewares to improve the resilience and security of your .NET application.

What Are Error Middlewares?
Error middlewares are components that intercept unhandled exceptions in the application, allowing you to log, handle, and respond to these errors appropriately. They are essential to ensure that the application continues to function safely and that users receive friendly error messages.

Implementing an Error Middleware
Let’s create a simple middleware to capture exceptions and log the error details:

Step 1: Creating the Middleware

public class ErrorHandlingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<ErrorHandlingMiddleware> _logger;

    public ErrorHandlingMiddleware(RequestDelegate next, ILogger<ErrorHandlingMiddleware> logger)
    {
        _next = next;
        _logger = logger;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "An unexpected error occurred!");
            await HandleExceptionAsync(context, ex);
        }
    }

    private static Task HandleExceptionAsync(HttpContext context, Exception exception)
    {
        context.Response.ContentType = "application/json";
        context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

        var response = new { message = "Internal Server Error. Please try again later." };
        var jsonResponse = JsonSerializer.Serialize(response);

        return context.Response.WriteAsync(jsonResponse);
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 2: Registering the Middleware

Now, let’s register the middleware in the application’s request pipeline:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseMiddleware<ErrorHandlingMiddleware>();

    // Other middlewares...
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}
Enter fullscreen mode Exit fullscreen mode

Enhancing Resilience and Security
Implementing error middlewares brings several benefits:

  1. Resilience: Ensures the application continues running even after an unexpected error.

  2. Security: Prevents exposing sensitive error details to end users.

  3. Maintenance: Makes it easier to identify and fix issues through detailed exception logging.

Conclusion

Implementing error middlewares is like having airbags in a car: they protect your application when something goes wrong, ensuring it continues to operate safely and efficiently. By capturing and handling exceptions appropriately, you improve the resilience and security of your .NET application.

💖 💪 🙅 🚩
fabrcio_marcondessantos
Fabrício Marcondes Santos

Posted on July 20, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related