Cross-Origin Resource Sharing (CORS) es una característica de seguridad implementada por los navegadores web para evitar que una página web realice solicitudes a un dominio diferente al que sirvió la página web. Esto se conoce como la Política del Mismo Origen. Cuando necesitas permitir que tu aplicación C# MVC (actuando como una API o servidor) sea accedida por una aplicación del lado del cliente (como un SPA de JavaScript) alojada en un dominio diferente, deberás configurar CORS.
Los métodos de configuración difieren ligeramente entre ellos.
Configuración de CORS en ASP.NET Core MVC
ASP.NET Core proporciona formas robustas y flexibles de configurar CORS utilizando middleware y atributos.
1. Usando Middleware (Políticas Globales o Nombradas)
Este es el enfoque más común y recomendado para controlar las políticas CORS globalmente o para grupos específicos de endpoints.
a. Añadir Servicios CORS
Primero, necesitas añadir los servicios CORS al contenedor de servicios de tu aplicación en Program.cs
(o Startup.cs
en versiones anteriores de Core).
// Program.cs
var builder = WebApplication.CreateBuilder(args);
// Define una política CORS nombrada
var MyAllowSpecificOrigins = "AllowClientApp";
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowClientApp",
policyBuilder =>
{
// Specify the exact origin of your client application
policyBuilder.WithOrigins("http://localhost")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// builder.Services.AddControllers();
// Añade otros servicios (controladores, vistas, etc.)
builder.Services.AddControllersWithViews();
var app = builder.Build();
b. Habilitar el Middleware CORS
A continuación, habilita el middleware CORS en el pipeline de solicitud HTTP. Esto debería colocarse típicamente después de app.UseRouting()
y antes de app.UseAuthorization()
.
// Program.cs
// ... (Código anterior para construir la aplicación)
app.UseRouting();
// Aplica la política nombrada
app.UseCors(MyAllowSpecificOrigins);
// O aplica la política predeterminada
// app.UseCors();
app.UseAuthorization();
app.MapControllers();
app.Run();
2. Usando el Atributo [EnableCors]
(Por Controlador o Por Acción)
Puedes aplicar políticas CORS a un nivel más granular utilizando el atributo [EnableCors]
en tus controladores o métodos de acción individuales.
a. Añadir Servicios CORS (Igual que arriba)
Todavía necesitas definir tus políticas CORS en Program.cs
usando builder.Services.AddCors()
.
b. Aplicar el Atributo
Una vez que las políticas están definidas, puedes aplicarlas usando el atributo [EnableCors]
:
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
[EnableCors("AllowClientApp")]
// Aplica la política nombrada a todo el controlador
public class MyController : Controller
{
public IActionResult Index()
{
return View();
}
[EnableCors("AnotherPolicyName")]
// Aplica una política diferente a una acción específica
public IActionResult GetData()
{
return Ok("Data from API");
}
[DisableCors]
// Deshabilita CORS para una acción específica,
//incluso si el controlador lo tiene habilitado
public IActionResult SensitiveData()
{
return Ok("Sensitive data");
}
}