2008-10-23 4 views
1

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

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(); 

ответ

0

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

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

0

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

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

2) Положите точку останова на пятно «responseReader.ReadToEnd()» и посмотрите, хорошо ли то, что выходит.

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