Я реализую метод действия прокси, который пересылает входящий веб-запрос и перенаправляет его на другую веб-страницу, добавляя несколько заголовков. Метод действия работает с файлом для запросов 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 должен был позаботиться о записи нужного количества байтов.
Любые предложения будут ценны.
Спасибо,
Адриан