Frage

Ich erstelle ein HTTPWebRequest -Objekt von einer anderen ASPX -Seite, um den Antwortstrom in meinem Datenspeicher zu speichern. Die URL, mit der ich das HTTPWebRequest -Objekt erstellt habe, hat QueryString, um die richtige Ausgabe zu rendern. Wenn ich mit einem alten Browser zur Seite stöbere, wird es richtig gerendert. Wenn ich versuche, den Ausgabestream mithilfe der httpwebresponse.getResponSstream () abzurufen, wird meine integrierte Fehlerprüfung wiedergegeben.

Warum sollte es im Browser korrekt rendern, aber nicht die HTTPWebRequest- und HTTPWebresponse -Objekte verwenden?

Hier ist der Quellcode:

Code hinter der Zielseite:

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 hinter der Seite Erstellen von HTTPWebRequest -Objekt

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

Aktualisieren

@David McEwing - Ich erstelle den httpwebRequest mit dem vollständigen Seitennamen. Die Seite generiert immer noch die Fehlerausgabe. Ich habe das Code -Beispiel der Zielseite aktualisiert, um genau zu demonstrieren, was ich tue.

@Chris Lively - Ich leite nicht zu einer Fehlerseite um, ich generiere eine Meldung, die angibt, dass der Wert für Abfragezeichenfolge nicht gefunden wurde. Ich habe das Beispiel für den Quellcode aktualisiert.

Update 1:

Ich habe versucht, Fiddler zu verwenden, um das HTTPWebRequest zu verfolgen, und es wurde im Web -Sessions -Verlaufsfenster nicht angezeigt. Fehlt mir etwas in meinem Quellcode, um eine vollständige Webanforderung und Antwort zu erhalten?

Update 2:

Ich habe den folgenden Codeabschnitt nicht in mein Beispiel aufgenommen und es war Schuldige, das das Problem verursachte. Ich habe die festgelegt Credentials Eigentum des HttpWebRequest mit einem Sevice -Konto anstelle meines Werbekontos, das das Problem verursachte.

Ich habe mein Beispiel für das Quellcode aktualisiert

War es hilfreich?

Lösung 3

Ich muss die folgende Codezeile ersetzen:

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

mit:

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

Andere Tipps

Welchen Webserver verwenden Sie? Ich kann mich an einen Punkt in meiner Vergangenheit erinnern, als ich etwas mit IIS gemacht habe http://example.com/ und http://example.com/default.asp ließ die Abfragezeichenfolge fallen.

Vielleicht führen Sie Fiddler (oder einen Protokoll -Sniffer) und sehen Sie, ob etwas passiert, das Sie nicht erwarten.

Überprüfen Sie außerdem, ob das Geben im vollständigen Seitennamen funktioniert. Wenn dies der oben genannte ist, ist es mit ziemlicher Sicherheit das Problem.

Optional können Sie versuchen, die zu verwenden Erlaubte Eigenschaft des httprequestObject.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top