web-dev-qa-db-fra.com

Comment utiliser la requête verbe GET avec WebClient?

Comment changer le verbe d'une requête WebClient? Il semble ne permettre que/default à POST, même dans le cas de DownloadString.

        try
        {
            WebClient client = new WebClient();               
            client.QueryString.Add("apiKey", TRANSCODE_KEY);
            client.QueryString.Add("taskId", taskId);
            string response = client.DownloadString(TRANSCODE_URI + "task");                
            result = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(response);
        }
        catch (Exception ex )
        {
            result = null;
            error = ex.Message + " " + ex.InnerException;
        }

Et Fiddler dit:

POST http://someservice?apikey=20130701-234126753-X7384&taskId=20130701-234126753-258877330210884 HTTP/1.1
Content-Length: 0
25
FlavorScape

Si vous utilisez HttpWebRequest à la place, vous obtiendrez un meilleur contrôle de l'appel. Vous pouvez changer le verbe REST par la propriété Method (par défaut, GET)

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(HostURI);
request.Method = "GET";
String test = String.Empty;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    Stream dataStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(dataStream);
    test = reader.ReadToEnd();
    reader.Close();
    dataStream.Close();
 }
 DeserializeObject(test ...)
29
Niklas Bjorkman

Vous ne savez pas si vous pouvez utiliser WebClient pour cela. Mais pourquoi ne pas utiliser la méthode HttpClient.GetAsync (String) http://msdn.Microsoft.com/en-us/library/hh158944.aspx

3
jeffo

Comme on peut le voir dans le code source de .NET, la méthode HTTP du DownloadString dépend de l’état du champ d’instance privé WebClient m_Method, qui est réinitialisé à chaque nouvel appel de méthode de requête ( link ) et par défaut Créateur de la requête Web (dépend de l'URI, par exemple, le protocole ftp obtient un autre créateur), mais ce n'est pas un thread-safe.

Peut-être partagez-vous cette instance WebClient entre plusieurs appels simultanément?

Donc, il est confus. Ceci ou l'URI confond le créateur de WebRequest.

0
user3638471