web-dev-qa-db-fra.com

Obtenir la chaîne de requête complète en C # ASP.NET

En tant que programmeur PHP), je suis habitué à utiliser $ _GET pour récupérer la chaîne de requête HTTP ... et si j’ai besoin de toute la chaîne, il existe de nombreuses façons de le faire.

Dans ASP cependant, je n'arrive pas à obtenir la requête.

Voici le code pour news.aspx (intégré dans du 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);
%>

Je récupère un PHP sortie du script d'un serveur distant, et cela fonctionne parfaitement sans le Request.Querystring.

Le problème est que j'essaie d'obtenir la chaîne de requête complète sur la première ligne: Request.Querystring. Je reçois une erreur " La référence d'objet n'est pas définie sur une instance d'objet ", ce qui signifie essentiellement que Request.Querystring n'existe pas.

Avez-vous une idée du problème? Comment puis-je obtenir cette chaîne de requête alors quand index.aspx est appelé comme http://test.com/news.aspx?id=2 mon script va chercher http: // www. example.com/rendernews.php?id=2

71
Antony Carthy

Essayez Request.Url.Query si vous voulez que la chaîne de requête brute soit une chaîne.

177
nitzmahone

Cela devrait bien fonctionner pour vous.

Écrivez ce code dans le Page_Load événement de la page.

string ID = Request.QueryString["id"].ToString();
Response.Redirect("http://www.example.com/rendernews.php?id=" + ID);
16
Naveed Butt

Request.QueryString vous renvoie une collection de paires clé/valeur représentant la chaîne de requête. Pas une ficelle. Ne pensez pas que cela causerait une erreur de référence d'objet. La raison pour laquelle vous obtenez cela est parce que, comme Mauro l'a souligné dans les commentaires. C'est QueryString et non Querystring.

Essayer:

Request.QueryString.ToString();

ou

<%                                 
    string URL = Request.Url.AbsoluteUri 
    System.Net.WebClient wc = new System.Net.WebClient();
    string data = wc.DownloadString(URL);
    Response.Output.Write(data);
%>

Identique à votre code mais Request.Url.AbsoluteUri renverra le chemin complet, y compris la chaîne de requête.

5
Damien

Utilisez simplement Request.QueryString.ToString() pour obtenir la chaîne de requête complète, comme ceci:

string URL = "http://www.example.com/rendernews.php?"+Request.Querystring.ToString();
1
terR0Q

J'ai testé votre exemple, et si Request.QueryString n'est pas convertible en chaîne ni implicite ni explicite, la méthode .ToString () renvoie le résultat correct.

De plus, lors de la concaténation avec une chaîne utilisant l'opérateur "+", comme dans votre exemple, le résultat sera également renvoyé (car il se comporte comme si l'appelait .ToString ()).

En tant que tel, votre code n’est pas faux, et je dirais que votre problème est dû à une faute de frappe dans votre code qui écrit "Querystring" au lieu de "QueryString".

Et cela a plus de sens avec votre message d’erreur car si le problème est que QueryString est une collection et non une chaîne, il devra donner un autre message d’erreur.

0
yoel halb