2

我正在尝试修补RestSharp以使其能够POST使用非 ASCII 字符作为POST请求正文的 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);
}

但它会抛出“IOExceptionStream.Dispose()写入所有字节之前无法关闭流”。

如何发布此 XML?

4

1 回答 1

0

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

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

于 2010-08-31T20:13:19.347 回答