este problema se puede resolver de diferentes formas, pero te dejamos la que para nosotros es la respuesta más completa.
Solución:
Debido a que tiene una política CORS muy simple (Permitir todas las solicitudes del dominio XXX), no necesita complicarlo tanto. Intente hacer lo siguiente primero (una implementación muy básica de CORS).
Si aún no lo ha hecho, instale el paquete nuget de CORS.
Install-Package Microsoft.AspNetCore.Cors
En el método ConfigureServices de su startup.cs, agregue los servicios CORS.
public void ConfigureServices(IServiceCollection services)
services.AddCors(); // Make sure you call this previous to AddMvc
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Luego, en su método Configure de su startup.cs, agregue lo siguiente:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
// Make sure you call this before calling app.UseMvc()
app.UseCors(
options => options.WithOrigins("http://example.com").AllowAnyMethod()
);
app.UseMvc();
Ahora pruébalo. Las políticas son para cuando desea diferentes políticas para diferentes acciones (por ejemplo, diferentes hosts o diferentes encabezados). Para su ejemplo simple, realmente no lo necesita. Comience con este ejemplo simple y modifique según sea necesario desde allí.
Lectura adicional: http://dotnetcoretutorials.com/2017/01/03/enabling-cors-asp-net-core/
-
En ConfigurarServicios agregar
services.AddCors();
ANTES servicios.AddMvc(); -
Añadir UseCors en Configurar
app.UseCors(builder => builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader()); app.UseMvc();
El punto principal es que agregar app.UseCors
antes de app.UseMvc()
.
Asegúrese de declarar la funcionalidad de CORS antes que MVC para que el middleware se active antes de que la canalización de MVC obtenga el control y finalice la solicitud.
Después de que el método anterior funcione, puede cambiarlo y configurar un ORIGEN específico para aceptar llamadas de API y evitar dejar su API tan abierta para cualquiera.
public void ConfigureServices(IServiceCollection services)
services.AddCors(options => options.AddPolicy("ApiCorsPolicy", builder =>
builder.WithOrigins("http://localhost:4200").AllowAnyMethod().AllowAnyHeader();
));
services.AddMvc();
En el método de configuración, dígale a CORS que use la política que acaba de crear:
app.UseCors("ApiCorsPolicy");
app.UseMvc();
Acabo de encontrar este artículo compacto sobre el tema: https://dzone.com/articles/cors-in-net-core-net-core-security-part-vi
Creé mi propia clase de middleware que funcionó para mí, creo que hay algo mal con la clase de middleware de .net core
public class CorsMiddleware
private readonly RequestDelegate _next;
public CorsMiddleware(RequestDelegate next)
_next = next;
public Task Invoke(HttpContext httpContext)
httpContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
httpContext.Response.Headers.Add("Access-Control-Allow-Credentials", "true");
httpContext.Response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name");
httpContext.Response.Headers.Add("Access-Control-Allow-Methods", "POST,GET,PUT,PATCH,DELETE,OPTIONS");
return _next(httpContext);
// Extension method used to add the middleware to the HTTP request pipeline.
public static class CorsMiddlewareExtensions
public static IApplicationBuilder UseCorsMiddleware(this IApplicationBuilder builder)
return builder.UseMiddleware();
y lo usé de esta manera en startup.cs
app.UseCorsMiddleware();
Reseñas y valoraciones del tutorial
Si estás contento con lo expuesto, tienes el poder dejar un ensayo acerca de qué le añadirías a este escrito.