Domanda

Sto creando un oggetto HttpWebRequest da un'altra pagina aspx per salvare il flusso di risposta nel mio archivio dati. L'URL che sto usando per creare l'oggetto HttpWebRequest ha una stringa di query per il rendering dell'output corretto. Quando sfoglio la pagina utilizzando qualsiasi vecchio browser, viene visualizzato correttamente. Quando provo a recuperare il flusso di output utilizzando HttpWebResponse.GetResponseStream (), viene eseguito il rendering del mio controllo errori integrato.

Perché dovrebbe essere visualizzato correttamente nel browser, ma non usando gli oggetti HttpWebRequest e HttpWebResponse?

Ecco il codice sorgente:

Codice dietro la pagina di destinazione:

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

Codice dietro la pagina che crea l'oggetto 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();

Aggiorna

@David McEwing - Sto creando HttpWebRequest con il nome completo della pagina. La pagina sta ancora generando l'output dell'errore. Ho aggiornato l'esempio di codice della pagina di destinazione per dimostrare esattamente cosa sto facendo.

@Chris Lively - Non sto reindirizzando a una pagina di errore, ho generato un messaggio che indica che il valore della stringa di query non è stato trovato. Ho aggiornato l'esempio del codice sorgente.

Aggiornamento 1:

Ho provato a utilizzare Fiddler per tracciare HttpWebRequest e non è stato visualizzato nella finestra della cronologia delle sessioni Web. Mi sto perdendo qualcosa nel mio codice sorgente per ottenere una richiesta e una risposta web complete.

Aggiornamento 2:

Non ho incluso la seguente sezione di codice nel mio esempio ed è stato il colpevole a causare il problema. Stavo impostando la proprietà Credentials di HttpWebRequest con un account sevice anziché il mio account AD che causava il problema.

Ho aggiornato il mio esempio di codice sorgente

È stato utile?

Soluzione 3

Devo sostituire la seguente riga di codice:

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

con:

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

Altri suggerimenti

Quale server web stai usando? Ricordo a un certo punto del mio passato quando facevo qualcosa con IIS c'era un problema in cui il reindirizzamento tra http://example.com / e http://example.com/default.asp hanno lasciato cadere la stringa della query.

Forse esegui Fiddler (o uno sniffer di protocollo) e vedi se sta succedendo qualcosa che non ti aspetti.

Controlla anche se passare il nome completo della pagina funziona. Se lo fa quanto sopra è quasi sicuramente il problema.

Facoltativamente, puoi provare a utilizzare AllowAutoRedirect proprietà di HttpRequestObject.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top