domingo, 19 de enero de 2014

Web API. Fiddler OK, jQuery Fail

Llevo un día completo y complejo con un auténtico error rarísimo.

He construido una API REST con ASP.NET Web API que puedes ver lo básico en este tutorial en GenbetaDev.

Pero cuando el resto del equipo se puso a intentar consumirla desde jQuery, nos encontramos con un molesto error que nos devolvía, según la herramienta de “snifado” de las comunicaciones http, errores diferentes.

Lo peor es que Fiddler, que es la que utilizo para probar que todo está bien programado, me respondía que todo era correcto… para volverse loco!!.

Por suerte un mensaje en la consola de IE11 (que se abre con F12) me indicó el camino del error (a pesar de que Ambrin me lo venía avisando desde el principio): tenía un problema de cross domain.

¿Pero cómo podía tener ese problema si me baje el paquete de Nuget para habilitar CROS y lo active en el fichero App_Star/WebApiConfig.cs?

Pues porque soy un gañan apresurado, y me había saltado un paso en la configuración. Si bien había habilitado el CORS, había ignorado completamente la definición de cuales eran los dominios desde donde iba a aceptar peticiones a la API.

Así en el fichero que os he indicado anteriormente he puesto:

    public static class WebApiConfig
   
{
       
public static void Register(HttpConfiguration config)
        {
           
// Web API configuration and services

            // Habilitando CORS
           
var urlPermitidas = new EnableCorsAttribute("*", "*", "*");
            config.EnableCors(urlPermitidas);

           
// Web API routes
           
config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name:
"DefaultApi",
                routeTemplate:
"api/{controller}/{id}",
                defaults:
new { id = RouteParameter.Optional }
            );
        }
    }

 
Aquí lo único que tengo que tener cuidado, es que estoy configurando una API pública sin validación de seguridad. Es decir, cualquiera, desde cualquier sitio va a poder leer de esta API.
La información completa y un excelente ejemplo lo puedes encontrar en este artículo.

Espero que sea de utilidad.

No hay comentarios: