Die Anforderung erfordert Pufferdaten, um HttpClient erfolgreich auszuführen

8

Ich versuche, einen Wörterbuchinhalt an einen Server mit POST method

zu senden %Vor%

Aber wenn ich den Code ausführe, bekomme ich den Fehler
WebException: The request requires buffering data to succeed HttpClient .

Ich möchte die Anfrage nicht mit WebRequest oder WebClient machen, ich möchte nur HttpClient verwenden.

Eine Frage existiert bereits mit der gleichen Ausnahme, die auftritt, wenn versucht wird, ein head request zu senden, das besagt, dass das Problem aufgetreten ist nur auf Xamarin Projekte, aber die Frage wurde noch nicht beantwortet. Es wurde nur erwähnt, dass er das Problem mit WebRequest gelöst hat.

Was ist der Fehler mit diesem Code auf Xamarin.Forms ? und Wie könnte es mit HttpClient gelöst werden?

bearbeite

Vollständige Ausnahme

%Vor%     
Yazan W Yusuf 01.11.2016, 21:13
quelle

4 Antworten

2

Für die gleiche Frage, die Sie bei der Beantragung einer Suchanfrage gestellt haben, lesen Sie bitte den folgenden Link, wo die Lösung in Xamarin-Foren eine davon erhalten hat, die dasselbe Problem bei der Erstellung einer POST-Anfrage (200) an die Google-URL hatte.

Die Lösung in diesem Fall bestand darin, die URL auf eine tatsächliche Seite und nicht auf eine Weiterleitung zu ändern.

Hier ist der Link Lösung für das Problem

Ich hoffe, es hilft.

    
V.Sriram 10.11.2016, 21:14
quelle
2

Auf der Grundlage des Mono-Quellcodes für HttpWebRequest sieht es so aus, als ob der Server eine Umleitung ausgibt, und HttpWebRequest (unter den Covern von HttpClient) verarbeitet das nicht.

Ich bin mir nicht sicher, welche Version der Mono-Quelle verwendet wird, aber das sieht nach einem möglichen Kandidaten aus: Ссылка

Diese Version hat einen "throw" in Zeile 1005 in HttpWebRequest.EndGetResponse, die mit dem Ausnahme-Stack übereinstimmt, den Sie sehen. Die Zeichenfolge in der Ausnahme "Die Anforderung benötigt Pufferdaten, um erfolgreich zu sein" stammt von HttpWebRequest.Redirect.

Der nächste Schritt wäre die Verwendung von Fiddler (oder ähnlichem), um die genaue POST-Nachricht zu replizieren, die der Xamarin-Client versucht, die Antwort zu sehen, die er vom Server erhält.

    
DavidS 06.11.2016 23:05
quelle
2

Leider

%Vor%

Lädt die gesamte Antwort vor dem Beenden herunter, sodass keine Pufferung verwendet wird. Die einzige Alternative ist, zu verwenden,

%Vor% Die Option

HttpCompletionOption.ResponseHeadersRead macht HttpClient direkt nach dem Herunterladen von Kopfzeilen von SendAsync zurück. Und Sie können auf das Lesen des Inhalts warten.

    
Akash Kava 10.11.2016 12:07
quelle
0

Trifft das auf iOS und / oder Android zu?

Ich würde versuchen, den HttpClient-Handler so zu ändern, dass er der native Handler ist. Dies löst viele Probleme mit vielen Themen (TLS ist ein großer). Verwenden Sie für iOS den NSUrlSession-Handler und für Android den AndroidClientHandler. Sie sollten HttpClient für alles mit Xamarin verwenden können.

    
BrewMate 10.11.2016 23:30
quelle

Tags und Links