Cómo usar el método GET con la solicitud WebClient


¿Cómo puedo cambiar el Método de una solicitud WebClient? Parece que solo permite POST por defecto. Incluso en el caso 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;
        }

Y la prueba Fiddler dice:

POST http://someservice?apikey=20130701-234126753-X7384&taskId=20130701-234126753-258877330210884 HTTP/1.1
Content-Length: 0
Author: Olorunfemi Ajibulu, 2013-07-02

3 answers

Si usa HttpWebRequest en su lugar obtendrá más control de la llamada. Puede cambiar el verbo REST por la propiedad Method (el valor predeterminado es 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
Author: Niklas Bjorkman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-02 09:32:54

No estoy seguro de si puede usar WebClient para eso. Pero por qué no usar HttpClient.Método GetAsync (String) http://msdn.microsoft.com/en-us/library/hh158944.aspx

 3
Author: jeffo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-02 00:41:13

Como se puede ver en el código fuente de.NET, el Método HTTP del DownloadString depende del estado del campo de instancia WebClient privado m_Method, que se borra a null en cada nueva llamada al método de solicitud (link) y por defecto al Creador de solicitud Web (depende del URI, por ejemplo, el protocolo ftp obtiene otro creador), pero esto no es seguro para subprocesos.

¿Quizás está compartiendo esta instancia WebClient entre varias llamadas simultáneamente?

Así que se confunde. Esto o el URI confunde al creador de WebRequest.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 19:44:13