我陷入了这个httpWebRequest问题。我需要将XML发送到网站。但是我不断收到要求的负面回应。我看到了一些设置了ContentLength的代码示例。这可能是问题所在,但我不知道。

用writePaymentRequest(...)编写的XML完全符合网站的要求,因为它们用另一种编程语言获得了我的xml标记并且成功了。结果只包含他们的错误,而不是我应该收到的信息。

我无法设置contentlength,因为在创建带有请求流的writer时我不知道长度。

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设置为字节数组的长度,然后将字节数组写入请求中

编辑

您的代码中间看起来像这样(我认为):

    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;


编辑#2

尝试使用XmlTextWriter(ms, System.Text.Encoding.UTF8)代替XmlTextWriter(ms, new UTF8Encoding(false)),看看是否可以解决编码问题

关于c# - 流和XmlTextwriter…请求未正确接收,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2177231/

10-09 23:34