Search code examples
c#webclienthttp-get

How to use verb GET with WebClient request?


How might I change the verb of a WebClient request? It seems to only allow/default to POST, even in the case of 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;
        }

And Fiddler says:

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

Solution

  • If you use HttpWebRequest instead you would get more control of the call. You can change the REST verb by the Method property (default is 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 ...)