No estoy seguro de lo que me falta, pero parece que mi política CORS no funciona con .NET Core 3.1 y Angular 8 del lado del cliente.
Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
// ...
// Add CORS policy
services.AddCors(options =>
{
options.AddPolicy("foo",
builder =>
{
// Not a permanent solution, but just trying to isolate the problem
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
// Use the CORS policy
app.UseCors("foo");
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Mensaje de error del lado del cliente:
Access to XMLHttpRequest at 'https://localhost:8082/api/auth/' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
ACTUALIZAR:
Aunque estaba configurando CORS incorrectamente (y la respuesta aceptada a continuación ayudó de hecho con eso) la raíz del problema no estaba relacionada. Para un contexto adicional, la aplicación funcionaba completamente bien cuando ejecutaba la API y la aplicación Angular usando la CLI: solo tenía este problema después de implementarlos en un servidor web.
El problema "real" terminó relacionado con la conexión SQL, que solo descubrí después de agregar el registro de errores de archivos planos a la API y ejecutar un seguimiento de SQL Server para descubrir que la aplicación no podía conectarse a SQL en absoluto.
Normalmente esperaría que esto solo devuelva un 500 y me habría dado cuenta del problema en cuestión de 10 segundos; sin embargo, la configuración incorrecta de CORS significaba que nunca se devolvió un 500 porque el middleware CORS falló primero. ¡Esto fue inmensamente frustrante por decir lo menos! . Sin embargo, quiero agregar eso aquí en caso de que otros se encuentren en esta situación, ya que estaba "persiguiendo al conejo equivocado", por así decirlo. Después de arreglar la configuración de CORS, me di cuenta de que el problema real no tenía ninguna relación con CORS.
TL; DR; - A veces, los errores del lado del servidor ".NET que no son CORS" se pueden devolver como errores CORS si las políticas CORS no se establecen correctamente
Referencias
https://medium.com/swlh/cors-headers-with-dot-net-core-3-5c9dfc664785
app.UseCors("foo");
antesapp.UseHttpsRedirection();