Ich versuche, einen Wörterbuchinhalt an einen Server mit POST
method
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?
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.
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.
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.
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.
Tags und Links c# xamarin.forms