Buscar..


Observaciones

La seguridad del navegador impide que una página web realice solicitudes AJAX a otro dominio. Esta restricción se denomina política del mismo origen e impide que un sitio malintencionado lea datos confidenciales de otro sitio. Sin embargo, a veces es posible que desee permitir que otros sitios realicen solicitudes de origen cruzado a su aplicación web.

El intercambio de recursos de origen cruzado (CORS) es un estándar de W3C que permite a un servidor relajar la política del mismo origen. Usando CORS, un servidor puede permitir explícitamente algunas solicitudes de origen cruzado mientras rechaza otras. CORS es más seguro y más flexible que las técnicas anteriores, como JSONP.

Habilitar CORS para todas las solicitudes

Use el método de extensión UseCors() en IApplicationBuilder en el método Configure para aplicar la política CORS a todas las solicitudes.

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddCors();
}

public void Configure(IApplicationBuilder app)
{
    // Other middleware..

    app.UseCors(builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyHeader()
               .AllowAnyMethod();
    });

    // Other middleware..

    app.UseMvc();
}

Habilitar la política CORS para controladores específicos

Para habilitar una determinada política de CORS para controladores específicos, debe crear la política en la extensión AddCors dentro del método ConfigureServices :

services.AddCors(cors => cors.AddPolicy("AllowAll", policy =>
{
    policy.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader();
}));

Esto le permite aplicar la política a un controlador:

[EnableCors("AllowAll")]
public class HomeController : Controller
{
   // ...
}

Políticas de CORS más sofisticadas

El generador de políticas le permite crear políticas sofisticadas.

app.UseCors(builder =>
{
    builder.WithOrigins("http://localhost:5000", "http://myproductionapp.com")
           .WithMethods("GET", "POST", "HEAD")
           .WithHeaders("accept", "content-type", "origin")
           .SetPreflightMaxAge(TimeSpan.FromDays(7));
});

Esta política solo permite los orígenes http://localhost:5000 y http://myproductionapp.com con solo los métodos GET , POST y HEAD y solo acepta los encabezados HTTP de accept , content-type y origin . El método SetPreflightMaxAge hace que los navegadores SetPreflightMaxAge en caché el resultado de la solicitud de verificación previa ( OPTIONS ) para que se almacene en caché durante el tiempo especificado.

Habilitar la política CORS para todos los controladores

Para habilitar una política CORS en todos sus controladores MVC, debe crear la política en la extensión AddCors dentro del método ConfigureServices y luego configurar la política en CorsAuthorizationFilterFactory

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Cors.Internal;
...
public void ConfigureServices(IServiceCollection services) {
    // Add AllowAll policy just like in single controller example.
    services.AddCors(options => {
        options.AddPolicy("AllowAll",
           builder => {
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
        });
    });

    // Add framework services.
    services.AddMvc();

    services.Configure<MvcOptions>(options => {
        options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAll"));
    });
}

public void Configure(IApplicationBuilder app) {
    app.useMvc();
    // For content not managed within MVC. You may want to set the Cors middleware
    // to use the same policy.
    app.UseCors("AllowAll");
}

Esta política de CORS se puede sobrescribir en un controlador o acción, pero esto puede establecer el valor predeterminado para toda la aplicación.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow