Я ожидаю, что он буферизует все, пока вы не закончите писать, после чего он сможет сразу использовать длину контента. Если вы установите:
request.AllowWriteStreamBuffering = false;
тогда я подозреваю, что он потерпит неудачу, по крайней мере, при записи в поток.
Кстати, ваше вычисление требуемой длины для postArray
, похоже, предполагает один байт на символ, что не всегда будет так ... и вы звоните ToString
на postBody
, что выглядит как избыточный. В любом случае, я не уверен, почему вы пытаетесь записать один вызов ... либо вы можете позвонить три раза:
byte[] postBodyBytes = Encoding.UTF8.GetBytes(postBody);
postStream.Write(postBodyBytes, 0, postBodyBytes.Length);
// etc
или (предпочтительно) просто используйте StreamWriter
:
using (Stream postStream = request1.EndGetRequestStream(result))
{
using (StreamWriter writer = new StreamWriter(postStream)
{
writer.Write(postBody);
writer.Write(mainBody);
writer.Write(endBody);
}
}
Это также неясно, почему вы добавили 1 к необходимой длине при инициализации postArray
. Вы пытаетесь отправить дополнительный "0" байт в конце данных?