Не генерирует полный ответ из объекта HttpWebResponse в C # - PullRequest
0 голосов
/ 05 мая 2009

Я создаю объект HttpWebRequest на другой странице aspx, чтобы сохранить поток ответов в моем хранилище данных. У URL, который я использую для создания объекта HttpWebRequest, есть строка запроса для отображения правильного вывода. Когда я захожу на страницу, используя любой старый браузер, он корректно отображает. Когда я пытаюсь получить выходной поток, используя HttpWebResponse.GetResponseStream (), он выполняет мою встроенную проверку ошибок.

Почему он правильно отображается в браузере, но не использует объекты HttpWebRequest и HttpWebResponse?

Вот исходный код:

Код позади целевой страницы:

protected void PageLoad(object sender, EventsArgs e)
{
   string output = string.Empty;

   if(Request.Querystring["a"] != null)
   {
      //generate output
      output = "The query string value is " + Request.QueryString["a"].ToString();
   }
   else
   {
      //generate message indicating the query string variable is missing
      output = "The query string value was not found";
   }

   Response.Write(output);
}

Код позади страницы, создающей объект HttpWebRequest

string url = "http://www.mysite.com/mypage.aspx?a=1";
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url)

//this if statement was missing from original example
if(User.Length > 0)
{
    request.Credentials = new NetworkCredentials("myaccount", "mypassword", "mydomain");
    request.PreAuthenticate = true;
}

request.UserAgent = Request.UserAgent;
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
Stream resStream = response.GetResponseStream();  
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(resStream, encode, true, 2000);
int count = readStream.Read(read, 0, read.Length);
string str = Server.HtmlEncode(" ");

while (count > 0)
{
    // Dumps the 256 characters on a string and displays the string to the console.
    string strRead = new string(read, 0, count);
    str = str.Replace(str, str + Server.HtmlEncode(strRead.ToString()));
    count = readStream.Read(read, 0, 256);
}

// return what was found
result = str.ToString();

resStream.Close();
readStream.Close();

Обновление

@ Дэвид Макьюинг - я создаю запрос HttpWebRequest с полным именем страницы. Страница все еще генерирует сообщение об ошибке. Я обновил пример кода целевой страницы, чтобы продемонстрировать, что именно я делаю.

@ Chris Lively - я не перенаправляю на страницу с ошибкой, я генерирую сообщение о том, что значение строки запроса не найдено. Я обновил пример исходного кода.

Обновление 1:

Я попытался с помощью Fiddler отследить запрос HttpWebRequest, и он не отображался в окне истории веб-сеансов. Я что-то упустил в исходном коде, чтобы получить полный веб-запрос и ответ.

Обновление 2:

Я не включил следующий раздел кода в мой пример, и он был виновником проблемы. Я устанавливал свойство Credentials HttpWebRequest с учетной записью службы вместо учетной записи AD, которая вызывала проблему.

Я обновил пример исходного кода

Ответы [ 3 ]

2 голосов
/ 05 мая 2009

Какой веб-сервер вы используете? Я могу помнить, что когда-то в прошлом, когда я что-то делал с IIS, была проблема, когда перенаправление между http://example.com/ и http://example.com/default.asp отбросило строку запроса.

Возможно, запустите Fiddler (или анализатор протокола) и посмотрите, происходит ли что-то, чего вы не ожидаете.

Также проверьте, работает ли переход на полное имя страницы. Если это так, проблема почти наверняка есть.

0 голосов
/ 06 мая 2009

Мне нужно заменить следующую строку кода:

request.Credentials = new NetworkCredentials("myaccount", "mypassword", "mydomain");

с:

request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
0 голосов
/ 05 мая 2009

При желании вы можете попробовать использовать свойство AllowAutoRedirect объекта HttpRequestObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...