¿Cómo habilitar CORS en un proyecto de API web ASP.NET Core 6.0?
Configuré CORS en mi proyecto de API web ASP.NET Core 6.0. Pero la solicitud previa (preflight) recibe un error http 405.
En otras palabras, no se permite HTTP OPTION. Parece que CORS no está habilitado.
He visto ejemplos con config.EnableCors();
pero no hay un App_Start/WebApiConfig.cs
en esta plantilla de proyecto.
¿Qué me estoy perdiendo aquí?
Program.cs
var builder = WebApplication.CreateBuilder(args);
// Añade servicios al contenedor.
builder.Services.AddControllers();
// Obtén más información sobre cómo configurar Swagger/OpenAPI en https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var devCorsPolicy = “devCorsPolicy”;
builder.Services.AddCors(options =>
{
options.AddPolicy(devCorsPolicy, builder => {
//builder.WithOrigins(“http://localhost:800”).AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
//builder.SetIsOriginAllowed(origin => new Uri(origin).Host == “localhost”);
//builder.SetIsOriginAllowed(origin => true);
});
});
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
app.UseCors(devCorsPolicy);
}
else
{
app.UseHttpsRedirection();
app.UseAuthorization();
//app.UseCors(prodCorsPolicy);
}
app.MapControllers();
app.Run();
davy.ai
Parece que has configurado correctamente el CORS, pero es posible que te falte el middleware requerido para manejar las solicitudes OPTIONS. Puedes agregar el middleware
UseCors()
a la tubería de solicitudes de tu aplicación para manejar las solicitudes CORS, incluidas las solicitudes de preflight. En tu archivoProgram.cs
, agrega el siguiente código antes deapp.MapControllers()
:Esto habilitará la política de CORS que has definido anteriormente para todas las solicitudes entrantes. Además, asegúrate de haber agregado el paquete
Microsoft.AspNetCore.Cors
a tu proyecto.Después de realizar estos cambios, la solicitud de preflight debería manejarse correctamente y debería devolver el código de respuesta HTTP esperado.