Als PHP-Programmierer bin ich es gewohnt, $ _GET zum Abrufen der HTTP-Abfragezeichenfolge zu verwenden ... und wenn ich die gesamte Zeichenfolge benötige, gibt es viele Möglichkeiten, dies zu tun.
In ASP kann ich die Abfrage jedoch nicht erhalten.
Hier ist der Code für news.aspx (eingebettet in HTML):
<%
string URL = "http://www.example.com/rendernews.php?"+Request.Querystring;
System.Net.WebClient wc = new System.Net.WebClient();
string data = wc.DownloadString(URL);
Response.Output.Write(data);
%>
Ich rufe die Ausgabe eines PHP-Skripts von einem Remote-Server ab, und dies funktioniert perfekt ohne den Request.Querystring.
Das Problem ist, dass ich versuche, die vollständige Abfragezeichenfolge in der ersten Zeile abzurufen: Request.Querystring. Ich erhalte die Fehlermeldung " Objektreferenz nicht auf eine Instanz eines Objekts festgelegt ", was im Grunde bedeutet, dass Request.Querystring nicht vorhanden ist.
Irgendeine Idee, wo das Problem liegt? Wie kann ich diese Abfragezeichenfolge erhalten, wenn index.aspx wie http://test.com/news.aspx?id=2 aufgerufen wird, ruft mein Skript http://www.example.com/rendernews.php?id=2 ab
Antworten:
Versuchen Sie,
Request.Url.Query
ob Sie den rohen Querystring als Zeichenfolge möchten.quelle
Dies sollte für Sie gut funktionieren.
Schreiben Sie diesen Code für den
Page_Load
Fall der Seite.string ID = Request.QueryString["id"].ToString(); Response.Redirect("http://www.example.com/rendernews.php?id=" + ID);
quelle
Request.QueryString
Gibt Ihnen eine Sammlung von Schlüssel / Wert-Paaren zurück, die die Abfragezeichenfolge darstellen. Kein String. Denken Sie jedoch nicht, dass dies einen Objektreferenzfehler verursachen würde. Der Grund, warum Sie das bekommen, ist, wie Mauro in den Kommentaren betonte. Es ist QueryString und nicht Querystring.Versuchen:
oder
<% string URL = Request.Url.AbsoluteUri System.Net.WebClient wc = new System.Net.WebClient(); string data = wc.DownloadString(URL); Response.Output.Write(data); %>
Entspricht Ihrem Code,
Request.Url.AbsoluteUri
gibt jedoch den vollständigen Pfad einschließlich der Abfragezeichenfolge zurück.quelle
Verwenden Sie einfach
Request.QueryString.ToString()
, um die vollständige Abfragezeichenfolge wie folgt abzurufen:string URL = "http://www.example.com/rendernews.php?"+Request.Querystring.ToString();
quelle
Ich habe Ihr Beispiel getestet, und während Request.QueryString weder implizit noch explizit in eine Zeichenfolge konvertierbar ist, gibt die Methode .ToString () das richtige Ergebnis zurück.
Wenn Sie wie in Ihrem Beispiel mit dem Operator "+" mit einer Zeichenfolge verketten, wird außerdem das richtige Ergebnis zurückgegeben (da sich dies so verhält, als ob .ToString () aufgerufen wurde).
Als solches ist nichts falsch an Ihrem Code, und ich würde vorschlagen, dass Ihr Problem auf einen Tippfehler in Ihrem Code zurückzuführen ist, der "Querystring" anstelle von "QueryString" schreibt.
Dies ist bei Ihrer Fehlermeldung sinnvoller, da QueryString eine weitere Fehlermeldung geben muss, wenn das Problem darin besteht, dass QueryString eine Sammlung und keine Zeichenfolge ist.
quelle
Vor einem Moment bin ich auf das gleiche Problem gestoßen. und ich löse es auf folgende Weise.
Response.Redirect("../index.aspx?Name="+this.textName.Text+"&LastName="+this.textlName.Text);
in Bezug auf das dies
quelle