我正在尝试修补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?
答案 0 :(得分:0)
我没有使用过RestSharp,但看起来解释我的猜测是有效负载的ContentLength与内部字符串不匹配。 XML使用UTF-8转义,因此有效负载可能会变大。因此,在原始字符串上,Content-Length的表示可能会有所不同。
也许您在错误的地方计算内容长度?