Open Source

19 jun, 2024

Novidades do .NET 9: melhoria simplificando respostas com falhas em Minimal APIs no ASP.NET Core

Publicidade

.NET 9 traz melhorias envolvendo TypedResults, com novas opções de métodos que permitem retornar um erro do tipo 500 (Internal Server Error). Já abordei inclusive esta capacidade em um vídeo recente no Canal .NET (clique aqui para acessar este conteúdo no YouTube).

.NET 9

Na próxima listagem podemos observar o uso do método InternalServerError com TypedResults (com o retorno de uma string com a descrição do erro), simulando assim uma falha para efeitos de testes:

using APIContagem;
using APIContagem.Models;
using Microsoft.AspNetCore.Http.HttpResults;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton<Contador>();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseSwagger();
app.UseSwaggerUI();

app.UseHttpsRedirection();

app.MapGet("/contador",
    Results<Ok<ResultadoContador>, InternalServerError<string>> (Contador contador) =>
{
    int valorAtualContador;
    lock (contador)
    {
        contador.Incrementar();
        valorAtualContador = contador.ValorAtual;
    }
    app.Logger.LogInformation($"Contador - Valor atual: {valorAtualContador}");
    
    if (Convert.ToBoolean(Convert.ToBoolean(app.Configuration["SimularFalha"])) &&
        valorAtualContador % 2 == 0)
    {
        app.Logger.LogError(
            "Simulando uma falha para testar TypedResults.InternalServerError...");
        return TypedResults.InternalServerError("Simulação de falha");
    }

    return TypedResults.Ok(new ResultadoContador()
    {
        ValorAtual = contador.ValorAtual,
        Local = contador.Local,
        Kernel = contador.Kernel,
        Framework = contador.Framework,
        Mensagem = app.Configuration["Saudacao"]
    });
}).Produces<ResultadoContador>().Produces(StatusCodes.Status500InternalServerError).WithOpenApi();

app.Run();

Vale destacar que o método InternalServerError também conta com uma versão genérica, possibilitando que se retorne um payload JSON em uma resposta co

Vale destacar que o método InternalServerError também conta com uma versão genérica, possibilitando que se retorne um payload JSON em uma resposta com status code 500.

Ao acionar o método InternalServerError de TypedResults (no exemplo a seguir durante o debugging da aplicação de testes):

Uma reposta com status code 500 será produzida, incluindo em seu conteúdo a mensagem de erro mencionada anteriormente:

Na próxima imagem temos os logs produzidos durante os testes:

Clique nesta imagem para visualizar com uma melhor resolução

Esta aplicação foi disponibilizada no GitHub:

https://github.com/renatogroffe/ASPNETCore9-MinimalAPIs-TypedResults-InternalServerError_ContagemAcessos-v2

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!