Corrigiendo el error de CORS en una minimal API de .NET 7 🚑

Publicado el 18.06.2023 a las 23:08

Corrigiendo el error de CORS en una minimal API de .NET 7 🚑

  1. ¿Qué es la política de CORS?

  2. Configurando CORS en una minimal API con .NET 7

  3. Código completo para añadir CORS en una minimal API con .NET 7

Logo de fjmduran

Corrigiendo el error de CORS en una minimal API de .NET 7 🚑

Esta semana he seguido desarrollando mi nuevo proyecto backend con .NET 7, y al comenzar a hacerle peticiones con un cliente me he encontrado con el famoso error de CORS 🚩

Error de CORS

En esta ocasión no tenemos ningún problema, ya que el proyecto backend lo estoy desarrollando yo y es en el backend donde se soluciona el tema de las políticas de CORS 🎉


En una ocasión tuve que desarrollar un frontend con Angular y me encontré con este mismo problema.


En esa ocasión, el equipo de desarrolladores del backend no era muy accesible y me las ingenié en desarrollo para baipasear las políticas de CORS.


Si estás interesado te lo dejo aquí debajo.

Imagen del artículo

Solucionando el problema de CORS en Angular 🅰

Solventa el error de CORS en tus proyectos de Angular con un proxy

¿Qué es la política de CORS?

La política de CORS (Cross-Origin Resource Sharing) es un mecanismo de seguridad implementado por los navegadores web para controlar las solicitudes de recursos (archivos JavaScript, imágenes, fuentes...) realizadas desde un origen (dominio, protocolo y puerto) hacia otro origen diferente.


Dicho con palabras sencillas, la política de CORS establece reglas sobre qué dominios pueden acceder a los recursos de un servidor web expuesto en Internet.


Esto ayuda a prevenir posibles ataques de seguridad al restringir el acceso cruzado entre diferentes dominios.


Sin la configuración adecuada de CORS, los navegadores modernos imponen una política llamada Same-Origin Policy (Política de mismo origen), lo que significa que las solicitudes desde un origen solo pueden acceder a recursos del mismo origen.


Esto evita que un script malicioso en un sitio web acceda a los datos de otro sitio web sin permiso.


Cuando un navegador realiza una solicitud a un recurso en un dominio diferente, el servidor debe enviar ciertos encabezados de respuesta CORS para indicar qué dominios tienen permiso para acceder a sus recursos.


Estos encabezados incluyen el Access-Control-Allow-Origin que especifica qué dominios pueden acceder y otros encabezados relacionados con los métodos HTTP permitidos, los encabezados personalizados...


Si una solicitud no cumple la política de CORS, el navegador bloqueará la respuesta del servidor y nos mostrará un error en la consola.


La configuración adecuada de CORS permite a los sitios web y aplicaciones enviar solicitudes y recibir respuestas de otros dominios de manera segura y controlada 🔐

Configurando CORS en una minimal API con .NET 7

Vamos al turrón, si estás aquí lo que querrás será el código 🤣


En tu fichero Program.cs o en el fichero en el que levantes la aplicación web.


Después de declarar el constructor de la aplicación web, añades

builder.Services.AddCors(options =>
{
    options.AddPolicy("MyAllowedOrigins",
        policy =>
        {
            policy.WithOrigins("http://localhost:4200") // INCLUYE EL PUERTO ❗
                .AllowAnyHeader()
                .AllowAnyMethod();
        });
});

Y finalmente, después de declarar la aplicación web añades

var app = builder.Build();

Esto es todo 😎


Te dejo a continuación el código completo para una minimal API básica

Código completo para añadir CORS en una minimal API con .NET 7

//Program.cs
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
👇👇👇
builder.Services.AddCors(options =>
{
    options.AddPolicy("MyAllowedOrigins",
        policy =>
        {
            policy.WithOrigins("http://localhost:4200") 
                .AllowAnyHeader()
                .AllowAnyMethod();
        });
});
👆👆👆

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseCors("MyAllowedOrigins"); 👈👈👈

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

//Aquí tus endpoints
app.MapGet("/dataBaseIsAlive", () =>
{
    try
    {
        if (bdd.GetStatusConnection()) {
            return Results.Ok();
        }
        return Results.Problem("No se pudo conectar");
    }
    catch (Exception e) {
        return Results.Problem("No se pudo conectar");
    }
    
});

app.Run();

Hasta luego 🖖