2010-08-31 60 views
2

我试图修补RestSharp,因为它能够POST具有非ASCII字符的XML作为POST请求正文。使用非ASCII字符发布XML

下面是它如何被写成:

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); 
} 

但它Stream.Dispose()抛出IOException

如何发布此XML?

回答

0

我还没有使用过RestSharp,但看我的解释是,我的猜测是有效载荷的ContentLength与内部字符串不匹配。 XML使用UTF-8转义,所以有效载荷可能会变大。因此,对于原始字符串,该表示可能会与Content-Length不同。

也许你在错误的地方计算了Content-Length?