En los tres últimos capítulos he recorrido las instalaciones y configuraciones fundamentales para poder implementar una API REST con tecnología .NET (más bien Microsoft).
Este capítulo voy a tratar la habilitación de CORS en mi API. Es decir, el permitir que se hagan llamadas AJAX desde JavaScript, desde direcciones (dominios) diferentes a la del servidor. Lo cual es un agujero de seguridad en muchos casos, pero que es imprescindible para una API pública (aunque debería, entonces, de implementar seguridad de acceso).
Habilitando Cross-origin resource sharing
La descripción detallada de porqué los navegadores impiden el acceso vía AJAX a dominios diferentes del dominio del servidor, es algo que escapa del alcance de este tutorial de iniciación, pero que tengas claro que está prohibido por una buena razón, y que habilitarlo solo lo deberías hacer si estás en desarrollo o si tienes una buena política de autenticación de acceso a la API.
La forma más sencilla de habilitar CORS es utilizando las capacidades de NuGet para localizar e instalar el código necesario. Así pulso con el botón derecho del ratón encima del icono de la solución y selecciono, en el menú contextual que obtengo, la opción de "Gestionar paquetes NuGet de la solución...".
En la ventana que se abre, escojo "Online" en las opciones del menú vertical de la izquierda y escribo en la casilla de búsqueda en la esquina superior derecha la palabra "cors". Después de un ratito - dependiendo de la velocidad de conexión a la Red - me aparecen varios resultados de entre los cuales escojo "Microsoft ASP.NET Web API 2.x Cross-Origin Support", y pulso en el botón de "Instalar".
Lo siguiente que me pregunta el asistente es los proyectos en donde quiero instalar CORS, y le he dicho que en todos los del tutorial.
Antes de iniciar la instalación completa, debo aceptar las licencias de uso de todo lo que se va a instalar y configurar. Y, como todo el mundo, no me leo ni una de ellas y continúo.
Ahora sí, se lía a desinstalar, buscar y resolver dependencias e instalar las versiones más recientes y aquellas que son necesarias. Acabando, finalmente, el proceso; y marcando las características añadidas a mis proyectos.
Ahora toca picar un poquito de código para habilitar y definir cuáles son los dominios que pueden atacar mi API vía AJAX. Para ello abro la carpeta App_Start y edito el fichero WebApiConfig.cs.
¿Qué le estoy diciendo con estas dos líneas de código añadido? En la segunda línea estoy habilitando las comunicaciones Cross Domain, y en la primera línea le indico que le dé acceso a cualquier dominio de origen (el primer asterísco). Aquí podría indicar cada uno de los dominios permitido, separandolos por una coma ("www.midominio1.com, www.midominio2.es").
Pero esto requiere que añada un nuevo espacio de nombres por medio de un using en la cabecera de la clase referenciando a: "System.Web.Http.Cors".
Y con esto ya tengo lista mi API para ser consumida desde cualquier punto de Internet.
Más información | ASP.NET Web API En GenbetaDev | Haciendo una API Rest en 1 hora con ASP.NET Web Api - I, Haciendo una API Rest en 1 hora con ASP.NET Web Api - II, Haciendo una API Rest en 1 hora con ASP.NET Web Api - III