如何在WebClient请求中使用动词GET?

时间:2013-07-02 00:38:53

标签: c# webclient http-get

如何更改WebClient请求的动词?它似乎只允许/默认为POST,即使是在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;
        }

Fiddler说:

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

3 个答案:

答案 0 :(得分:33)

如果您使用HttpWebRequest,则可以更好地控制呼叫。您可以通过Method属性更改REST动词(默认为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 ...)

答案 1 :(得分:3)

不确定您是否可以使用WebClient。但是为什么不使用HttpClient.GetAsync Method(String)http://msdn.microsoft.com/en-us/library/hh158944.aspx

答案 2 :(得分:0)

正如可以在.NET的源代码中看到的那样,DownloadString的HTTP方法取决于私有WebClient实例字段m_Method的状态,该字段在每次新的请求方法调用时被清除为null({ {3}})默认为Web请求创建者(取决于URI,例如ftp协议获取另一个创建者),但这不是线程安全的。

也许您正在同时在多个呼叫中共享此WebClient实例?

所以它变得困惑。这个或URI会混淆WebRequest创建者。