2016-08-25 2 views
1

Ich möchte sehen, was der Anfragetext meiner HTTP-Anfrage zu Debugging-Zwecken enthielt. Hier ist, was ich jetzt habe:Mit dem HttpClient, wie kann ich den Inhalt der Anfrage Inhalt anzeigen?

var httpResponseMessage = await _httpClient.PostAsync(uri, objectToInsert, jsonFormatter); 

//This throws an exception 
var thisDoesntWork = await httpResponseMessage.RequestMessage.Content.ReadAsStringAsync(); 

Dieses eine ObjectDisposedException wirft. Wie kann ich den Anfragetext anzeigen, um sicherzustellen, dass der gesendete JSON korrekt ist?

+5

Verwenden Sie [Fiddler] (http://www.telerik.com/fiddler) ...? – rene

+0

@rene - Ich weiß, dass ich Fiddler oder Wireshark oder viele andere Werkzeuge verwenden könnte, aber das ist keine Frage der Neugier. Möglicherweise möchte ich den Anfragetext für Überwachungszwecke protokollieren, so dass ich den Anfragetext programmatisch ermitteln muss. –

+0

@JustinHelgerson dann verwenden [FiddlerCore] (http://www.telerik.com/fiddler/fiddlercore) :) –

Antwort

1

Die kurze Antwort ist Sie können nicht nach der Anfrage wurde bereits abgeschickt. HttpClient disposed den Inhalt Körper nach der Anforderung als eine Bequemlichkeit für den Entwickler gemacht wird. Ein paar Einzelheiten finden Sie unter Why do HttpClient.PostAsync and PutAsync dispose the content?.

Alternativ können Sie von einer vorhandenen HttpContent-Implementierung erben, die Dispose-Methode überschreiben und den Inhalt des Inhalts vor dem Löschen protokollieren.

Oder, wie vorgeschlagen, verwenden Sie ein externes Tool, um die Anfrage im Flug zu überwachen.

-2

ObjectDisposedException wird ausgelöst, weil Sie die HttpRequestMessage und HttpClient ablegen, bevor Content.ReadAsStringAsync() beendet wird.

Beachten Sie, dass Content.ReadAsStringAsync() eine asynchrone Methode ist. Sie müssen warten, bis der Vorgang beendet ist, bevor Sie den HttpClient freigeben.

Wenn Sie nicht async Sie wollen, verwenden können .RESULT fügen Sie den Code zu zwingen synchron auszuführen:

var response = httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters)).Result; 

var contents = response.Content.ReadAsStringAsync().Result; 
+0

Ich veräußere den 'HttpClient' erst viel später. Offensichtlich entsorgt 'PostAsync' automatisch die' HttpRequestMessage' auf irgendeine Art und Weise, weshalb ich die Frage stelle. Wenn Sie sich meine Frage ansehen, warte ich bereits auf die 'ReadAsStringAsync' Methode. –

+0

Versuchen Sie dies und lassen Sie mich wissen, was die Antwort von ist: httpResponseMessage.EnsureSuccessStatusCode(); Dies wird eine Ausnahme auslösen, wenn die IsSuccessStatusCode-Eigenschaft für die HTTP-Antwort falsch ist. –

+0

Andere Sache, die Sie tun könnten, ist JSON als Zeichenfolge zum Testen zu senden. .... PostAsync (uri, neuer StringContent (Daten)); –

Verwandte Themen