Question

Je crée un objet HttpWebRequest à partir d'une autre page aspx pour enregistrer le flux de réponses dans mon magasin de données. L'URL que j'utilise pour créer l'objet HttpWebRequest a une chaîne de requête pour restituer la sortie correcte. Lorsque je navigue sur la page à l’aide d’un ancien navigateur, le rendu est correct. Lorsque j'essaie de récupérer le flux de sortie à l'aide de HttpWebResponse.GetResponseStream (), la vérification d'erreur intégrée est effectuée.

Pourquoi le rendu serait-il correctement effectué dans le navigateur, sans utiliser les objets HttpWebRequest et HttpWebResponse?

Voici le code source:

Code derrière la page cible:

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

Code derrière la page créant l'objet 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();

Mettre à jour

@David McEwing - Je crée HttpWebRequest avec le nom complet de la page. La page génère toujours la sortie d'erreur. J'ai mis à jour l'exemple de code de la page cible pour démontrer exactement ce que je fais.

@Chris Lively - Je ne redirige pas vers une page d'erreur, je génère un message indiquant que la valeur de la chaîne de requête n'a pas été trouvée. J'ai mis à jour l'exemple de code source.

Mise à jour 1:

J'ai essayé d'utiliser Fiddler pour suivre HttpWebRequest et il ne s'est pas affiché dans la fenêtre d'historique des sessions Web. Me manque-t-il quelque chose dans mon code source pour obtenir une demande et une réponse Web complètes?

Mise à jour 2:

Je n’ai pas inclus la section de code suivante dans mon exemple et c’est le coupable qui a causé le problème. Je définissais la propriété Credentials du HttpWebRequest avec un compte sevice au lieu de mon compte AD à l'origine du problème.

J'ai mis à jour mon exemple de code source

Était-ce utile?

La solution 3

Je dois remplacer la ligne de code suivante:

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

avec:

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

Autres conseils

Quel serveur Web utilisez-vous? Je me souviens qu'à un moment de mon passé, lorsque je travaillais avec IIS, il y avait un problème où la redirection entre http://example.com / et http://example.com/default.asp ont supprimé la chaîne de requête.

Peut-être lancer Fiddler (ou un renifleur de protocole) et voir s’il se passe quelque chose que vous ne vous attendez pas.

Vérifiez également si la transmission du nom de page complet fonctionne. Si tel est le cas, le problème est presque certainement résolu.

Vous pouvez éventuellement essayer d'utiliser AllowAutoRedirect propriété de HttpRequestObject.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top