Pregunta

Estoy atrapado en este problema httpwebrequest. Necesito enviar XML a un sitio web. Pero sigo recibiendo respuestas negativas a mi solicitud. Vi algunos ejemplos de código donde se estableció la longitud de contenido ... y ese podría ser el problema, pero no lo sé ...

El XML escrito en WritePaymentRequest (...) es exactamente como el sitio web necesita, porque obtuvieron mi marcado XML y tuvieron éxito, en otro lenguaje de programación. El resultado solo contiene su error en lugar de la información que se supone que debo recibir.

No puedo establecer el ContentLength porque no sé la longitud cuando creo al escritor con el requeststream en él.

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();
¿Fue útil?

Solución

Sabría la longitud si escribiera el XMLTextWriter a algo así como un MemoryStream primero. A partir de ahí, puede obtener los bytes, establecer el httpwebRequest.contentLength a la longitud de la matriz de bytes y luego escribir la matriz de bytes en su solicitud

editar

La mitad de su código se vería algo así (creo):

    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;

Editar #2

En vez de XmlTextWriter(ms, System.Text.Encoding.UTF8), probar XmlTextWriter(ms, new UTF8Encoding(false)) Para ver si eso soluciona el problema de codificación

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top