C# 流和XmlTextwriter。。。。未正确接收请求

C# 流和XmlTextwriter。。。。未正确接收请求,c#,xml,xmltextwriter,C#,Xml,Xmltextwriter,我被这个httpWebRequest问题困住了。我需要将XML发送到一个网站。但我的请求一直遭到否定。我看到一些设置ContentLength的代码示例。。。这可能是问题所在,但我不知道 用writePaymentRequest(…)编写的XML正是网站所需要的,因为他们得到了我的XML标记,并且在另一种编程语言中取得了成功。结果只包含他们的错误,而不是我应该接收的信息 我无法设置contentlength,因为在创建包含requeststream的编写器时,我不知道其长度 HttpWebReq

我被这个httpWebRequest问题困住了。我需要将XML发送到一个网站。但我的请求一直遭到否定。我看到一些设置ContentLength的代码示例。。。这可能是问题所在,但我不知道

用writePaymentRequest(…)编写的XML正是网站所需要的,因为他们得到了我的XML标记,并且在另一种编程语言中取得了成功。结果只包含他们的错误,而不是我应该接收的信息

我无法设置contentlength,因为在创建包含requeststream的编写器时,我不知道其长度

HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://some.website.com");
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";

using (writer = new XmlTextWriter(httpWebRequest.GetRequestStream(), System.Text.Encoding.UTF8))
{
 writePaymentRequest(writer, registrant, amount, signature, ipaddress);
}

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
String stringResult = streamReader.ReadToEnd();
streamReader.Close();

如果您首先将XmlTextWriter写入类似于MemoryStream的内容,您就会知道长度。从那里,您可以获取字节,将httpWebRequest.ContentLength设置为字节数组的长度,然后将字节数组写入请求

编辑

代码的中间部分应该是这样的(我认为):

编辑#2


不要使用
XmlTextWriter(ms,System.Text.Encoding.UTF8)
,而是尝试
XmlTextWriter(ms,new UTF8 Encoding(false))
以查看这是否解决了编码问题

这不起作用。不幸的是,它给出了同样的错误。在请求开始时,我确实看到bytearray(转换为字符串)中有三个问号。这可能是什么吗?这可能是一个简单的解决方案。。。连接可以工作,因为它会给出基于XML的错误消息。听起来像是编码问题。。。我会编辑我的答案,看看是否有帮助我只是有一个字的网站。。。它说它只收到第一行。。。。因此,在推送请求的过程中出现了一些问题……如果所有行都在“bytes”数组中,那么我想不出在您的端上还有什么其他不正确的地方。默认情况下,编码将发出一个3字节描述符,让我们知道它是utf8encoding(您看到的3个问号)。用“false”初始化它会告诉它不要写出这些内容
    MemoryStream ms = new MemoryStream();
    using (writer = new XmlTextWriter(ms, System.Text.Encoding.UTF8))
    {
        writePaymentRequest(writer, registrant, amount, signature, ipaddress);
    }
    byte[] bytes = ms.ToArray();
    ms.Close();
    httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length);
    httpWebRequest.ContentLength = bytes.Length;