Saltar al contenido

Cómo habilitar CORS en ASP.net Core WebAPI

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.UseCorsantes 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *