Отправка XML с символами, отличными от ASCII

Я пытаюсь исправить RestSharp, чтобы он мог POST XML-файлы с не-ASCII-символами в качестве POST тела запроса.

Вот как это пишется:

private void WriteRequestBody(HttpWebRequest webRequest) {
    if (HasBody) {
        webRequest.ContentLength = RequestBody.Length;

        var requestStream = webRequest.GetRequestStream();
        using (var writer = new StreamWriter(requestStream, Encoding.ASCII)) {
            writer.Write(RequestBody);
        }
    }
}

RequestBody — это строка, и когда сервер фактически пытается разобрать запрос, все символы, отличные от ASCII, превращаются в ???.

Теперь я делаю следующее:

var encoding = Encoding.UTF8;

webRequest.ContentLength = encoding.GetByteCount(RequestBody);

var requestStream = webRequest.GetRequestStream();
using (var writer = new StreamWriter(requestStream, encoding)) {
    writer.Write(RequestBody);
}

Но он выдает IOException на Stream.Dispose(), говоря: «Невозможно закрыть поток, пока все байты не будут записаны».

Как опубликовать этот XML?


person Anton Gogolev    schedule 31.08.2010    source источник


Ответы (1)


Я не использовал RestSharp, но в поисках объяснения я предполагаю, что ContentLength полезной нагрузки не соответствует внутренней строке. XML использует escape-последовательности UTF-8, поэтому полезная нагрузка может стать больше. Таким образом, в исходной строке представление Content-Length может отличаться.

Может быть, вы вычисляете Content-Length не в том месте?

person manuel aldana    schedule 31.08.2010