Cómo habilitar CORS en su API web

Las restricciones de seguridad en la política de seguridad de su navegador impiden que su navegador web realice solicitudes AJAX a un servidor en otro dominio. Esto también se conoce como política del mismo origen. En otras palabras, la seguridad del navegador incorporada evita que una página web de un dominio ejecute llamadas AJAX en otro dominio.

Aquí es donde CORS (Intercambio de recursos de origen cruzado) viene al rescate. CORS es un estándar W3C que le permite alejarse de la misma política de origen adoptada por los navegadores para restringir el acceso de un dominio a los recursos que pertenecen a otro dominio. Puede habilitar CORS para su API web utilizando el paquete de API web respectivo (según la versión de API web en uso) o el middleware OWIN.

Tenga en cuenta que el origen de una solicitud se compone de un esquema, un host y un número de puerto. Por lo tanto, se considera que dos solicitudes provienen del mismo origen si tienen el mismo esquema, host y número de puerto. Si alguno de estos difiere, las solicitudes se consideran de origen cruzado, es decir, no pertenecen a orígenes idénticos.

Habilitar la compatibilidad con CORS en ASP.NET Web API

ASP.NET Web API proporciona un excelente soporte para CORS. Para proporcionar compatibilidad con CORS en ASP.NET Web API 2, debe usar el paquete Microsoft.AspNet.WebApi.Cors NuGet. Para instalar este paquete, puede ejecutar el siguiente comando desde la consola del administrador de paquetes NuGet.

Paquete de instalación Microsoft.AspNet.WebApi.Cors

Alternativamente, puede seleccionar su proyecto en la ventana Explorador de soluciones e instalar el paquete a través del administrador de paquetes NuGet.

Si está utilizando Web API 1.0, puede habilitar la compatibilidad con CORS, incluidas las siguientes declaraciones en el controlador de eventos Application_BeginRequest del archivo Global.asax.cs.

HttpContext.Current.Response.AddHeader ("Acceso-Control-Permitir-Origen", allowedOrigin); 

HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Methods", "GET, POST");

Tenga en cuenta que "allowedOrigin" aquí es una variable de cadena que contiene el origen de la solicitud que desea acceder al recurso. 

La compatibilidad con CORS se puede habilitar en tres niveles. Estos incluyen los siguientes:

  • Nivel de acción
  • Nivel de controlador
  • Nivel global

Habilitar CORS a nivel global

Para habilitar CORS a nivel global, debe aprovechar el método EnableCors de la clase HttpConfiguration como se muestra en el fragmento de código que se muestra a continuación.

Registro vacío estático público (configuración de HttpConfiguration)

        {

            string origin = "// localhost: 50164 / WebClient /";

            EnableCorsAttribute cors = nuevo EnableCorsAttribute (origen, "*", "GET, POST");

            config.EnableCors (cors);

            // Especifique la configuración y los servicios de la API web aquí

            // Especifique aquí las rutas de la API web          

        }

    }

Consulte el fragmento de código proporcionado anteriormente. Observe cómo se ha especificado el origen de la solicitud. El parámetro * implica todos los encabezados de solicitud. Por lo tanto, se aceptarán las solicitudes GET y POST del dominio especificado, todas las demás solicitudes se rechazarán.

Habilitar CORS en el nivel de controlador

También puede habilitar la compatibilidad con CORS en el nivel del controlador. Para hacer esto, especifique el atributo [EnableCors] en su controlador de API web como se muestra a continuación.

  [EnableCors (origins: "// localhost: 50164 /", encabezados: "*", métodos: "*")]

    AuthorsController de clase pública: ApiController

    {  

        // Escriba sus métodos de controlador de API web aquí

    }

Habilite CORS en el nivel de acción

Del mismo modo, también puede habilitar CORS en el nivel de acción utilizando el atributo [EnableCORS]. Aquí hay un ejemplo que ilustra cómo se hace esto.

AuthorsController de clase pública: ApiController

    {

        [EnableCors (orígenes: "// localhost: 50164 /", encabezados: "*", métodos: "*")]

        public IEnumerable Get ()

        {

            devolver nueva cadena [] {"Joydip Kanjilal", "Steve Smith"};

        }

    }

Deshabilite CORS para una acción específica

Ahora, es posible que deba deshabilitar CORS para una acción específica o un grupo de acciones. Esta función puede ser útil cuando ya ha habilitado CORS a nivel global y ahora desea deshabilitarlo para una o más acciones debido a razones de seguridad. El siguiente fragmento de código ilustra cómo puede lograrlo utilizando el atributo [DisableCors].

[DisableCors ()]

public IEnumerable Get ()

   {

      devolver nueva cadena [] {"Joydip Kanjilal", "Steve Smith"};

   }

Si está utilizando ASP.NET Core, debe agregar el paquete Microsoft.AspNetCore.Cors a través de NuGet a su proyecto y luego escribir la siguiente declaración en el archivo Startup.cs para configurar la compatibilidad con CORS.

public void ConfigureServices (servicios IServiceCollection)

{

    services.AddCors ();

}

Puede habilitar CORS usando el middleware CORS; puede aprovechar el método de extensión UseCors en este sentido. Alternativamente, puede habilitar CORS en el controlador o en los niveles de acción utilizando el atributo EnableCors de la misma manera que lo hicimos anteriormente en este artículo. De manera similar, para deshabilitar CORS, puede usar el atributo [DisableCors].