Estoy tratando de conectarme a una API, que devuelve JSON codificado en GZip, desde un servicio WCF (servicio WCF a servicio WCF). Estoy usando HTTPClient para conectarme a la API y he podido devolver el objeto JSON como una cadena. Sin embargo, necesito poder almacenar estos datos devueltos en una base de datos y, como tal, pensé que la mejor manera sería devolver y almacenar el objeto JSON en una matriz o byte o algo por el estilo.
Con lo que tengo problemas específicamente es con la descompresión de la codificación GZip y he estado probando muchos ejemplos diferentes pero aún no puedo conseguirlo.
El siguiente código es cómo establezco mi conexión y obtengo una respuesta, este es el código que devuelve una cadena de la API.
public string getData(string foo)
{
string url = "";
HttpClient client = new HttpClient();
HttpResponseMessage response;
string responseJsonContent;
try
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
response = client.GetAsync(url + foo).Result;
responseJsonContent = response.Content.ReadAsStringAsync().Result;
return responseJsonContent;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return "";
}
}
He estado siguiendo algunos ejemplos diferentes como estos StackExchange API , MSDN y un par de stackoverflow, pero no he podido hacer que ninguno de estos funcione para mí.
¿Cuál es la mejor manera de lograr esto? ¿Estoy siquiera en el camino correcto?
Gracias chicos.
Respuestas:
Simplemente cree una instancia de HttpClient así:
Actualización del 19 de junio de 2020: no se recomienda usar httpclient en un bloque de 'uso', ya que podría causar el agotamiento del puerto.
Si usa .Net Core 2.1+, considere usar IHttpClientFactory e inyectar así en su código de inicio.
fuente
HttpClient
NO debe usarse en interioresusing
Ok, finalmente resolví mi problema. Si hay mejores formas, hágamelo saber :-)
El RootObject contiene el conjunto get que obtendrá los valores del JSON.
La forma más fácil de crear la (s) clase (s) anterior (es) es usar json2charp que lo formateará en consecuencia y también proporcionará los tipos de datos correctos.
Lo siguiente es de otra respuesta en Stackoverflow nuevamente, no tiene en cuenta JSON anidado.
Luego, finalmente, para insertar el conjunto de datos anterior en una tabla con columnas que se asignaron al JSON, utilicé una copia masiva de SQL y la siguiente clase
Entonces, lo anterior funciona para insertar JSON desde una webAPI en una base de datos. Esto es algo en lo que me pongo a trabajar. Pero de ninguna manera espero que sea perfecto. Si tiene alguna mejora, actualícela en consecuencia.
fuente
HttpClient
y suHttpResponse
interior unausing()
declaración cada uno para garantizar la eliminación adecuada y oportuna y el cierre de las corrientes subyacentes.Usé el código del enlace de abajo para descomprimir el flujo de GZip. Luego usé la matriz de bytes descomprimida para obtener el objeto JSON requerido. Espero que pueda ayudar a alguien.
https://www.dotnetperls.com/decompress
fuente