Ich habe versucht herauszufinden, wie man den Inhalt eines httpclient-Aufrufs liest, und ich kann ihn anscheinend nicht verstehen. Der Antwortstatus, den ich erhalte, ist 200, aber ich kann nicht herausfinden, wie ich zu dem tatsächlich zurückgegebenen Json komme, was alles ist, was ich brauche!
Folgendes ist mein Code:
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();
}
Und ich bekomme es nur von einer Methode aufzurufen:
Task<string> result = GetResponseString(text);
Und das bekomme ich
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>
Update: Dies ist mein aktueller Code gemäß Nathans Antwort unten
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;
}
Und ich nenne es von dieser Methode ....
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);
}
}
Und es läuft für immer weiter, es trifft die Linie
var model = JsonConvert.DeserializeObject<SentimentJsonModel>(result.Result);
einmal und es geht weiter, ohne an einem anderen Haltepunkt anzuhalten.
Wenn ich die Ausführung pausiere, heißt es
Id = Ausdruck kann nicht ausgewertet werden, weil der Code der aktuellen Methode optimiert ist., Status = Ausdruck kann nicht ausgewertet werden, weil der Code der aktuellen Methode optimiert ist., Methode = Ausdruck kann nicht ausgewertet werden, weil der Code der aktuellen Methode optimiert ist., Ergebnis = Ausdruck kann nicht ausgewertet werden, da der Code der aktuellen Methode optimiert ist.
Ich setze die Ausführung fort, aber es läuft nur für immer. Ich bin mir nicht sicher, wo das Problem liegt