2009-02-05 22 views
37

È possibile passare i parametri con una richiesta di ricezione HTTP? Se è così, come dovrei farlo allora? Ho trovato un post requst HTTP (link). In questo esempio la stringa postData viene inviata a un server web. Mi piacerebbe fare lo stesso usando ottenere invece. Google ha trovato questo esempio su HTTP get here. Tuttavia nessun parametro viene inviato al web server.Come fare una richiesta di ottenere HTTP con i parametri

risposta

17

In una richiesta GET, si passano i parametri come parte della stringa di query.

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

Se si immette l'URL completo che include i parametri nel adresse barra di iexplore, ho quindi ottenere la stessa risposta di come fare una richiesta http ottenere da C# – CruelIO

+0

Che dovrebbe essere il caso. – EndangeredMassa

+5

Questo non è il codice C# ... – psyklopz

85

Primo WebClient è più facile da usare; Ottenere gli argomenti vengono specificati sulla query-string - l'unico trucco è quello di ricordarsi di sfuggire alcun valore:

 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

mio modo preferito è questo. Gestisce l'evasione e l'analisi per te.

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

Grazie, ottima risposta. –

6

L'oggetto WebRequest sembra troppo lavoro per me. Preferisco usare il controllo WebClient.

Per utilizzare questa funzione è sufficiente creare due NameValueCollections contenenti i parametri e le intestazioni delle richieste.

Si consideri la seguente funzione:

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

aggiungere i parametri querystring (se necessario) come NameValueCollection in questo modo.

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

Aggiungi le tue intestazioni http (se necessario) come NameValueCollection in questo modo.

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

È inoltre possibile passare il valore direttamente tramite URL.

Se si desidera chiamare il metodo public static void calling(string name){....}

allora si dovrebbe chiamare utilizzando HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create("http://localhost:****/Report/calling?name=Priya); webrequest.Method = "GET"; webrequest.ContentType = "application/text";

Basta fare in modo che si sta utilizzando ?Object = value in URL

Problemi correlati