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();
Respuestas:
primero
app.UseRouting();
luegoapp.UseCors("foo");
Cambie su
Configure
método de la siguiente manera:¡Funcionó para mí!
fuente
ConfigureServices
código de OP resolvió mi problema. ¡Muchas gracias!API web está utilizando
app.UseHttpsRedirection()
; que causanCORS
problemas si la solicitud del cliente no estáhttps
basada. Entonces, para usarlo con elhttp
cliente, necesitamos comentar o eliminar esa línea.Este problema no es con
CORS
, el https está causando este problema, pero el error arrojado dice que está con CORS.fuente
Prueba esta utilidad
https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/ Utilizando esto, puede habilitar / deshabilitar los cors en su aplicación .net core
fuente
Como está utilizando localhost como
http://localhost:4200
, intente configurarlo en su configuración:Y
Configure
método:fuente
Al agregar el Servicio Cors, asegúrese de incluir
.SetIsOriginAllowed((host) => true)
después.WithOrigins("http://localhost:4200")
fuente