Почему я получаю «двойной ответ» от HttpWebResponse? - PullRequest
1 голос
/ 24 октября 2008

Следующий код (работает в ASP.Net 2.0) отображает содержимое запрошенного URL дважды . Я хочу, чтобы он отображал содержимое запрошенного URL только один раз. Я не могу понять, что я делаю неправильно. Запрашиваемый URL-адрес возвращает XML, и если я обращаюсь непосредственно к URL-адресу, он работает нормально.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
byte[] postDataBytes = Encoding.UTF8.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/xml";
request.ContentLength = postDataBytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postDataBytes, 0, postDataBytes.Length);
requestStream.Close();

// get response and write to console
response = (HttpWebResponse) request.GetResponse();
StreamReader responseReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
try {
   Response.Write(responseReader.ReadToEnd());
}
finally {
   responseReader.Close();
}
response.Close();

Ответы [ 3 ]

0 голосов
/ 24 октября 2008

Ваш код выглядит хорошо, поэтому я не думаю, что проблема в этом ... но я бы предложил следующее:

1) Возможно, ошибка находится на другом конце URL-адреса ... поэтому попробуйте нажать Google и посмотреть, хороший ли возвращенный контент.

2) Поместите точку останова в точку responseReader.ReadToEnd () и посмотрите, хорошо ли то, что из этого выходит.

3) Если этот код выше находится на странице ASPX ... вы обязательно вызываете "Response.End ();" после последней строки кода? (не "resposne.close ()", а "Response.End ()").

0 голосов
/ 24 октября 2008

Я нашел проблему. Это вовсе не с приведенным выше кодом, а с вызываемой страницей. Страница, которую я вызывал, была унаследована от класса, метод Page_OnInit которого содержал следующую строку: «MyBase.OnLoad (e)», в результате чего метод Page_OnLoad выполнялся дважды. Очевидно, это должен был быть MyBase.OnInit (e). Я не уловил его, потому что, когда я тестировал страницу напрямую, мне пришлось временно удалить наследование из класса из-за какого-то другого кода, который не позволил бы мне тестировать страницу напрямую.

Теперь я надену шляпу "Dunce" и на время отойду в угол. В любом случае спасибо за помощь.

0 голосов
/ 24 октября 2008

Откуда этот код запускается? Это может быть совершенно неактуально, но вы видели эту статью? ..

http://ddkonline.blogspot.com/2008/02/aspnet-double-postback-bug-strikes.html

...