Contenido del curso
Estructura de una Web API
- 7

Configurar CORS en APIs de .NET
Viendo ahora - 8

Rutas en APIs .NET con parámetros
12:50 min - 9

Swagger y Scalar para documentar APIs en .NET
14:25 min - 10

Cómo crear middlewares en ASP.NET Core
10:30 min - 11

Inyección de dependencias y logging en .NET
09:18 min - 12

Autenticación básica en APIs con middleware .NET
08:17 min
Arquitectura y Middlewares
- 13

Configurar Entity Framework Core en .NET
07:30 min - 14

Modelos y Fluent API en Entity Framework
10:00 min - 15

Servicios en .NET con Entity Framework
13:51 min - 16

Cómo crear controladores REST en .NET
14:46 min - 17

Conectar .NET con SQL Server usando Entity Framework
09:51 min - 18

Conectar .NET con PostgreSQL usando Entity Framework
06:57 min - 19

Capas de Clean Architecture en .NET
09:07 min - 20

Unit tests en .NET con Copilot y xUnit
09:05 min - 21

Qué aprender después de APIs con .NET
02:16 min
Configurar CORS en APIs de .NET
Resumen
Cuando intentas consumir una API .NET desde otra aplicación, lo más común es toparte con un error de CORS que bloquea la petición. Aquí aprenderás a configurar Cross-Origin Resource Sharing en tu API .NET para permitir que clientes externos accedan a tus endpoints sin romper la seguridad de tu proyecto.
¿Qué es CORS y por qué bloquea tu API en .NET?
CORS, o Cross-Origin Resource Sharing, es el mecanismo que define quién puede consumir tu API desde un origen distinto al servidor donde está alojada. Por defecto, las APIs en .NET no traen una configuración activa de CORS, así que cualquier origen externo queda bloqueado automáticamente.
¿Por qué funciona mi API en local pero falla desde otra app? Porque al probarla desde una aplicación de escritorio en la misma máquina no hay cambio de origen. En cuanto otra app intenta acceder desde un puerto o dominio distinto, CORS bloquea la petición.
Esto significa que mientras pruebes tu API contra sí misma todo parece correcto, pero al publicarla o al consumirla desde un frontend en React, Angular o cualquier cliente externo, vas a recibir el error de CORS en consola.
¿Cómo habilitar CORS en el archivo Program.cs?
La configuración inicial vive en Program.cs, que es el archivo principal donde registras servicios y middlewares. Ahí necesitas hacer dos cosas: registrar el servicio y aplicar el middleware.
Dentro del builder, agregas el servicio con AddCors, lo que carga todas las dependencias necesarias para que CORS funcione [01:32]. Luego, en la sección del app, defines el comportamiento que quieres permitir.
Una primera versión rápida luce así:
csharp builder.Services.AddCors();
app.UseCors(builder => { builder.AllowAnyHeader(); builder.AllowAnyOrigin(); });
Con AllowAnyHeader permites cualquier encabezado dentro del request, y con AllowAnyOrigin aceptas peticiones desde cualquier origen. Es la configuración más abierta posible.
¿Es seguro usar AllowAnyOrigin en producción?
No lo es. AllowAnyOrigin sirve para pruebas locales, pero en un ambiente productivo expone tu API a cualquier cliente. Lo correcto es definir explícitamente qué dominios o puertos pueden consumirla.
¿Qué hace AllowAnyOrigin exactamente? Le dice a tu API que acepte peticiones desde cualquier dominio, puerto o protocolo. Útil en desarrollo, peligroso en producción.
¿Cómo crear una política de CORS con nombre?
En lugar de inyectar la configuración directamente dentro del UseCors, lo más limpio es crear una política con nombre que puedas reutilizar y mantener ordenada.
El flujo es sencillo:
- Declaras una variable con el nombre de la política, por ejemplo
myAllowedOrigins. - Registras la política dentro de
AddCorsusandooptions.AddPolicy. - Aplicas esa política en el middleware con
app.UseCors(myAllowedOrigins).
El código queda así:
csharp var myAllowedOrigins = "myAllowedOrigins";
builder.Services.AddCors(options => { options.AddPolicy(name: myAllowedOrigins, policy => { policy.AllowAnyHeader(); policy.AllowAnyOrigin(); }); });
app.UseCors(myAllowedOrigins);
Esta estructura es más organizada porque centraliza la configuración en un solo lugar. Si en el futuro necesitas cambiar las reglas, solo tocas el bloque de AddPolicy sin perseguir líneas dispersas en el código.
¿Cómo verifico que la política está funcionando?
Ejecuta la API y carga los datos desde el cliente. Si todo está bien, verás cómo el endpoint responde y los datos se actualizan en cada refresh. En el ejemplo de la clase, los datos cambian de forma aleatoria en cada carga, lo que confirma que la petición llegó correctamente al servidor.
¿Cómo restringir orígenes específicos con WithOrigins?
La práctica recomendada es especificar exactamente qué clientes pueden consumir tu API. Para eso usas el método WithOrigins, que recibe las URLs autorizadas.
La idea es reemplazar AllowAnyOrigin por algo así:
csharp policy.WithOrigins("http://localhost:3000") .AllowAnyHeader();
Además, lo ideal es que esos orígenes vivan en el archivo appsettings.json, no hardcodeados, para que puedas cambiar la configuración por ambiente sin recompilar.
¿Cuál es la diferencia entre AllowAnyOrigin y WithOrigins?
AllowAnyOriginabre la puerta a cualquier cliente.WithOriginssolo deja entrar a las URLs que tú definas. La segunda es la opción correcta para producción.
El reto: consumir tu API desde React
Para cerrar la práctica, crea una pequeña aplicación en ReactJS, que normalmente corre en el puerto 3000, y trata de consumir tu API .NET. Comenta el AllowAnyOrigin y configura WithOrigins para que solo ese cliente de React pueda acceder sin generar errores de CORS.
Es el ejercicio perfecto para entender cómo se comporta tu API frente a un frontend real y cómo afinar la seguridad sin sacrificar la funcionalidad. ¿Ya lo intentaste? Cuéntame en los comentarios qué orígenes configuraste y si te apareció algún error inesperado.