2010-08-31 58 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?