"Bytes in den stream geschrieben überschreiten der Content-Length-bytes angegebene Größe" mit UTF8-codierte json
Ich bin vor encoding-Probleme beim senden ein JSON-Objekt zu Mandrill-API.
Während des Schreibens auf einen streamwriter mit UTF8-Codierung die folgende Ausnahme ausgelöst:
"Bytes in den stream geschrieben überschreiten der Content-Length-bytes angegebene Größe."
und gleich nach:
"Nicht schließen, stream, bis alle bytes geschrieben werden."
Dies ist der Teil des Codes zum senden das JSON-Objekt:
var httpWebRequest = (HttpWebRequest)WebRequest.Create(mandrillUrl + "/messages/send.json");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
var ser = new DataContractJsonSerializer(wrapper.GetType());
var ms = new MemoryStream();
ser.WriteObject(ms, wrapper);
var json = Encoding.UTF8.GetString(ms.ToArray());
httpWebRequest.ContentLength = json.Length;
var stream = httpWebRequest.GetRequestStream();
using (var strWriter = new StreamWriter(stream, Encoding.UTF8))
{
strWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
}
Scheint es mir, dass dieser Fehler im Zusammenhang mit der byte-Länge in UTF8, aber selbst wenn ich die doppelte httpWebRequest.ContentLength Wert ich bekomme immer noch den gleichen Fehler.
- UTF-8 ist eine variable-length-encoding). Die Anzahl der Zeichen ist nicht notwendigerweise gleich der Anzahl von bytes. Sie können nicht verwenden
json.Length
zu setzenhttpWebRequest.ContentLength
. - Lesen Sie stackoverflow.com/a/1656741/18771, dies wird Ihr problem lösen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Content-Length
muss in bytes angegeben, nichtchar
s