如何在WebClient请求中使用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>(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 

如果您使用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 ...) 

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

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

也许您同时在多个调用中共享此WebClient实例?

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