Blog sobre desarrollo de aplicaciones Software basado en tecnología Microsoft (.Net/SQL/IIS) y otras (php/MySQL/Apache/Android...).
lunes, junio 03, 2013
Consumir ASP.NET Web API desde Excel
En Excel existe la posibilidad de importar datos de una aplicación ASP.NET Web API, lo que nos permite trabajar con ellos y/o analizarlos de forma sencilla. Para ello se debe pulsar la opción Datos / Desde Web e indicar la URL adecuada.
Sin embargo, si no se indica lo contrario, Excel recogerá los datos en formato json, lo cual no sirve. Para solventar este problema se puede forzar a que la aplicación Web API retorne xml (aunque eso impedirá que podamos ver formato json en otros clientes, por ejemplo los navegadores, tal como se explica en el post anterior).
Para forzar a la aplicación que siempre envíe formato xml se puede añadir al método Application_Start de Global.asax la siguiente sentencia:
GlobalConfiguration.Configuration.Formatters.Remove( GlobalConfiguration.Configuration.Formatters.JsonFormatter );
Obtener Json en vez de XML (o al revés) en ASP.NET Web API
GlobalConfiguration.Configuration.Formatters.Remove( GlobalConfiguration.Configuration.Formatters.JsonFormatter );
elimina el formato Json y por lo tanto siempre retorna xml. Otras posibilidades son:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true; //Retorna json!!!??? GlobalConfiguration.Configuration.Formatters.JsonFormatter.UseDataContractJsonSerializer = true;
GlobalConfiguration.Configuration.Formatters.Add(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
GlobalConfiguration.Configuration.Formatters.Add(GlobalConfiguration.Configuration.Formatters.JsonFormatter);
Si no se cambia esta configuración en el Application_Start(), el retorno será Json ó xml dependiendo del request header
enviado. Así, si por ejemplo utilizamos el Internet Explorer para probar el web api implementado, el resultado lo obtendremos
en un fichero en formato json, mientras que si lo probamos con Firefox o Chrome el resultado lo obtendremos en formato
xml. Esto es porque cada uno de los navegadores envía un request header diferente.
Lo mismo ocurrirá con
nuestra aplicación cliente: dependiendo del request header que use, la aplicación servidor web api retornará un formato
u otro (json ó xml). Así si queremos forzar a que nos retorne json habría que forzar Accept: json/xml en el request header,
mientras que si nos interesa xml habría que forzar Accept: text/xml ó Accept: application/xml.
Si nos interesa utilizar como cliente un navegador web, habría que hacer algo similar utilizando alguna extensión. Por
ejemplo, para Chrome podemos utilizar la extensión Header Hacker que nos permite configurar los request headers. Para
obtener json (que es más legible) habría que añadir una línea para reemplazar:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
por:
Accept: json/xml
De forma análoga, para Firefox se puede utilizar la extensión Modify Headers.