He estado tratando de averiguar cómo leer el contenido de una llamada httpclient, y parece que no puedo entenderlo. El estado de respuesta que obtengo es 200, pero no puedo averiguar cómo llegar al Json real que se devuelve, ¡que es todo lo que necesito!
El siguiente es mi código:
async Task<string> GetResponseString(string text)
{
var httpClient = new HttpClient();
var parameters = new Dictionary<string, string>();
parameters["text"] = text;
Task<HttpResponseMessage> response =
httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters));
return await response.Result.Content.ReadAsStringAsync();
}
Y lo obtengo simplemente llamándolo desde un método:
Task<string> result = GetResponseString(text);
Y esto es lo que obtengo
response Id = 89, Status = RanToCompletion, Method = "{null}", Result = "StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:\r\n{\r\n Connection: keep-alive\r\n Date: Mon, 27 Oct 2014 21:56:43 GMT\r\n ETag: \"5a266b16b9dccea99d3e76bf8c1253e0\"\r\n Server: nginx/0.7.65\r\n Content-Length: 125\r\n Content-Type: application/json\r\n}" System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>
Actualización: este es mi código actual según la respuesta de Nathan a continuación
async Task<string> GetResponseString(string text)
{
var httpClient = new HttpClient();
var parameters = new Dictionary<string, string>();
parameters["text"] = text;
var response = await httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters));
var contents = await response.Content.ReadAsStringAsync();
return contents;
}
Y lo llamo de este método ...
string AnalyzeSingle(string text)
{
try
{
Task<string> result = GetResponseString(text);
var model = JsonConvert.DeserializeObject<SentimentJsonModel>(result.Result);
if (Convert.ToInt16(model.pos) == 1)
{
_numRetries = 0;
return "positive";
}
if (Convert.ToInt16(model.neg) == 1)
{
_numRetries = 0;
return "negative";
}
if (Convert.ToInt16(model.mid) == 1)
{
_numRetries = 0;
return "neutral";
}
return "";
}
catch (Exception e)
{
if (_numRetries > 3)
{
LogThis(string.Format("Exception caught [{0}] .... skipping", e.Message));
_numRetries = 0;
return "";
}
_numRetries++;
return AnalyzeSingle(text);
}
}
Y sigue funcionando para siempre, llega a la línea una
var model = JsonConvert.DeserializeObject<SentimentJsonModel>(result.Result);
vez y continúa sin detenerse en otro punto de interrupción.
Cuando pause la ejecución, dice
Id = No se puede evaluar la expresión porque el código del método actual está optimizado., Estado = No se puede evaluar la expresión porque el código del método actual está optimizado., Método = No se puede evaluar la expresión porque el código del método actual está optimizado., Resultado = No se puede evaluar la expresión porque el código del método actual está optimizado.
.. Continúo con la ejecución, pero se ejecuta para siempre. No estoy seguro de cual es el problema