簡體   English   中英

如何在WebClient請求中使用動詞GET?

[英]How to use verb GET with WebClient request?

我如何更改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

如果您使用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創建者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM