csharp-carter

Simplificando el enrutamiento en ASP.NET con Carter

Carter es una biblioteca de C# diseñada para facilitar el enrutamiento en aplicaciones ASP.NET Core.

Esta biblioteca busca simplificar la creación de API RESTful mediante una configuración más fluida y una estructura más organizada, eliminando la necesidad de escribir un código de enrutamiento repetitivo y verboso.

Principales características,

  • Modularidad: Permite agrupar rutas y lógica de controladores en módulos, facilitando la organización del código.
  • Simplicidad: Reduce la cantidad de código necesario para definir rutas y controladores.
  • Integración con ASP.NET Core: Funciona de manera fluida con la infraestructura de ASP.NET Core y el middleware.

Instalación y Configuración

Para comenzar a utilizar Carter en tu proyecto ASP.NET Core, instalamos el paquete NuGet de Carter utilizando la CLI de .NET:

Install-Package Carter

Alternativamente, puedes agregar el paquete mediante el Administrador de Paquetes NuGet en Visual Studio.

Cómo Usar Carter

Configuración

En primer lugar, en el archivo Startup.cs, debes configurar los servicios y el middleware para utilizar Carter. Asegúrate de agregar el servicio de Carter en el método ConfigureServices y configurar el enrutamiento en el método Configure.

using Carter;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCarter();

var app = builder.Build();

app.MapCarter();
app.Run();


public class HomeModule : ICarterModule
{
public void AddRoutes(IEndpointRouteBuilder app)
{
	app.MapGet("/", () => "Hello from Carter!");
}
}

Este fragmento de código define un módulo HomeModule que implementa la interfaz ICarterModule. Dentro del método AddRoutes, se configura una ruta GET en la raíz del sitio (”/”), que devuelve el mensaje “Hello from Carter!“.

Si ejecutas la aplicación y abres la dirección localhost(donde xxxx es el puerto configurado), verás esta respuesta de Carter.

Definir un Módulo

Carter simplifica la definición de rutas y controladores al permitirte agruparlos en módulos. Un módulo en Carter es una clase que hereda de CarterModule. Puedes definir rutas y lógica de controladores dentro de este módulo.

// Modules/ProductModule.cs
public class ProductModule : ICarterModule
{
    public void AddRoutes(IEndpointRouteBuilder app)
    {
        app.MapGet("/products", async (HttpRequest req) =>
        {
            var products = new[]
            {
                new { Id = 1, Name = "Product 1", Price = 10.0 },
                new { Id = 2, Name = "Product 2", Price = 20.0 }
            };
            return products;
        });

        app.MapGet("/qs", async (HttpRequest req) =>
        {
            var ids = req.Query.AsMultiple<int>("ids");
            return $"It's {string.Join(",", ids)}";
        });
    }
}

Dentro de este método, se definen dos rutas:

  • Ruta /products: Esta ruta maneja solicitudes GET a /products y devuelve una lista de productos en formato JSON.
  • Ruta /qs: Esta ruta maneja solicitudes GET a /qs y recupera múltiples valores de una consulta (query string) llamada ids. Luego, devuelve esos valores en una cadena separada por comas.