POSTing XML с не-ASCII символами - PullRequest
2 голосов
/ 31 августа 2010

Я пытаюсь исправить 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?

1 Ответ

0 голосов
/ 01 сентября 2010

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

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

...