使用非ASCII字符发布XML

时间:2010-08-31 08:01:20

标签: http post non-ascii-characters restsharp

我正在尝试修补RestSharp,以便能够将POST非ASCII字符的XML作为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 :(得分:0)

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

也许您在错误的地方计算内容长度?