2009-02-05 10 views
37

Est-il possible de passer des paramètres avec une demande get HTTP? Si oui, comment devrais-je alors le faire? J'ai trouvé un post-requete HTTP (link). Dans cet exemple, la chaîne postData est envoyée à un serveur Web. Je voudrais faire la même chose en utilisant obtenir à la place. Google a trouvé cet exemple sur HTTP obtenir here. Cependant, aucun paramètre n'est envoyé au serveur Web.Comment faire une requête get get HTTP avec les paramètres

Répondre

17

Dans une requête GET, vous transmettez des paramètres dans le cadre de la chaîne de requête.

string url = "http://somesite.com?var=12345"; 
+0

Si vous entrez l'URL complète, y compris les paramètres dans le adresse barre d'iexplore, puis-je obtenir la même réponse que faire une demande http obtenir de C# – CruelIO

+0

Cela devrait être le cas. – EndangeredMassa

+5

Ce code n'est pas C# ... – psyklopz

85

Première WebClient est plus facile à utiliser; GET arguments sont spécifiés sur la chaîne de requête - la seule astuce est de se rappeler d'échapper à toutes les valeurs:

 string address = string.Format(
      "http://foobar/somepage?arg1={0}&arg2={1}", 
      Uri.EscapeDataString("escape me"), 
      Uri.EscapeDataString("& me !!")); 
     string text; 
     using (WebClient client = new WebClient()) 
     { 
      text = client.DownloadString(address); 
     } 
93

Ma façon préférée est la suivante. Il gère l'échappement et l'analyse pour vous.

WebClient webClient = new WebClient(); 
webClient.QueryString.Add("param1", "value1"); 
webClient.QueryString.Add("param2", "value2"); 
string result = webClient.DownloadString("http://theurl.com"); 
+1

Merci, excellente réponse. –

6

L'objet WebRequest me semble être un travail trop fastidieux. Je préfère utiliser le contrôle WebClient.

Pour utiliser cette fonction, il vous suffit de créer deux NameValueCollections contenant vos paramètres et vos en-têtes de requête.

Tenir compte de la fonction suivante:

private static string DoGET(string URL,NameValueCollection QueryStringParameters = null, NameValueCollection RequestHeaders = null) 
    { 
     string ResponseText = null; 
     using (WebClient client = new WebClient()) 
     { 
      try 
      { 
       if (RequestHeaders != null) 
       { 
        if (RequestHeaders.Count > 0) 
        { 
         foreach (string header in RequestHeaders.AllKeys) 
          client.Headers.Add(header, RequestHeaders[header]); 
        } 
       } 
       if (QueryStringParameters != null) 
       { 
        if (QueryStringParameters.Count > 0) 
        { 
         foreach (string parm in QueryStringParameters.AllKeys) 
          client.QueryString.Add(parm, QueryStringParameters[parm]); 
        } 
       } 
       byte[] ResponseBytes = client.DownloadData(URL); 
       ResponseText = Encoding.UTF8.GetString(ResponseBytes); 
      } 
      catch (WebException exception) 
      { 
       if (exception.Response != null) 
       { 
        var responseStream = exception.Response.GetResponseStream(); 

        if (responseStream != null) 
        { 
         using (var reader = new StreamReader(responseStream)) 
         { 
          Response.Write(reader.ReadToEnd()); 
         } 
        } 
       } 
      } 
     } 
     return ResponseText; 
    } 

Ajouter vos paramètres querystring (si nécessaire) comme NameValueCollection comme si.

 NameValueCollection QueryStringParameters = new NameValueCollection(); 
     QueryStringParameters.Add("id", "123"); 
     QueryStringParameters.Add("category", "A"); 

Ajoutez vos en-têtes http (si nécessaire) en tant que NameValueCollection comme cela.

 NameValueCollection RequestHttpHeaders = new NameValueCollection(); 
     RequestHttpHeaders.Add("Authorization", "Basic bGF3c2912XBANzg5ITppc2ltCzEF"); 
0

Vous pouvez également transmettre la valeur directement via l'URL.

Si vous voulez appeler la méthode public static void calling(string name){....}

alors vous devriez appeler à l'aide HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://localhost:****/Report/calling?name=Priya); webrequest.Method = "GET"; webrequest.ContentType = "application/text";

Assurez-vous que vous utilisez ?Object = value dans l'URL

Questions connexes