Копирование запроса HTTP InputStream

Я реализую метод действия прокси что вперед входящий веб-запрос и вперед это к другой веб-странице, добавляя несколько заголовков. Файл работ метода действия для ПОЛУЧАЕТ запросы, но я все еще борюсь с передачей входящего запроса 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 должен был заботиться о записи правильной суммы байтов.

Любые предложения значительно ценились бы.

Спасибо,

Adrian

6
задан Adrian Grigore 10 August 2010 в 09:44
поделиться

1 ответ

попробуйте изменить блок внутри оператора if

long length = requestStream.Length;
webRequest.ContentLength = length;
requestStream.CopyTo(webRequest.GetRequestStream())

с

webRequest.Method = "POST";
webRequest.ContentLength = requestStream.Length;
webRequest.ContentType = "application/x-www-form-urlencoded";
Stream stream = webRequest.GetRequestStream();
requestStream.CopyTo(stream);
stream.Close();
1
ответ дан 8 December 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: