2010-08-31 3 views
2

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

Вот как это будет записано:

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?

ответ

0

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

Возможно, вы вычислите длину контента в неправильном месте?