Копирование Http-запроса InputStream
Я реализую метод действия прокси, который перенаправляет входящий веб-запрос и перенаправляет его на другую веб-страницу, добавляя несколько заголовков. Метод действия работает с файлом для запросов GET, но я все еще борюсь с пересылкой входящего запроса POST.
Проблема в том, что я не знаю, как правильно записать тело запроса в исходящий поток HTTP-запросов.
Вот сокращенная версия того, что я получил до сих пор:
//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())
{
...
}
Как только я вызываю GetResponse для исходящего http-запроса, я получаю следующее исключение:
ProtocolViolationException: You must write ContentLength bytes to the request stream before calling [Begin]GetResponse.
Я не понимаю, почему это происходит, так как requestStream.CopyTo должен был позаботиться о записи правильного количества байтов.
Любые предложения будут ценны.
Спасибо,
Адриан