Copiando solicitud HTTP InputStream

Estoy implementando un método de acción proxy que reenvía la solicitud web entrante y la reenvía a otra página web, agregando algunos encabezados. El método de acción funciona para las solicitudes GET, pero todavía estoy luchando con el reenvío de la solicitud POST entrante.

El problema es que no sé cómo escribir correctamente el cuerpo de la solicitud en la secuencia de solicitud HTTP saliente.

Aquí hay una versión abreviada de lo que tengo hasta ahora:

//the incoming request stream
var requestStream=HttpContext.Current.Request.InputStream;
//the outgoing web request
var webRequest = (HttpWebRequest)WebRequest.Create(url);
...

//copy incoming request body to outgoing request
if (requestStream != null && requestStream.Length>0)
            {
                long length = requestStream.Length;
                webRequest.ContentLength = length;
                requestStream.CopyTo(webRequest.GetRequestStream())                    
            }

//THE NEXT LINE THROWS A ProtocolViolationException
 using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
                {
                    ...
                }

Tan pronto como llamo a GetResponse en la solicitud HTTP saliente, obtengo la siguiente excepción:

ProtocolViolationException: You must write ContentLength bytes to the request stream before calling [Begin]GetResponse.

No entiendo por qué sucede esto, ya que requestStream.CopyTo debería haberse ocupado de escribir la cantidad correcta de bytes.

Cualquier sugerencia sería muy apreciada.

Gracias,

Adrian

Respuestas a la pregunta(3)

Su respuesta a la pregunta