Вопрос

Я создаю объект 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();

Обновить

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

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

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

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

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

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

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

Это было полезно?

Решение 3

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

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

с:

request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

Другие советы

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

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

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

При желании вы можете попробовать использовать Разрешить автоматическое перенаправление свойство HttpRequestObject. Свойство HttpRequestObject.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top