31

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

提琴手说:

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

3 回答 3

41

如果您改用 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 ...)
于 2013-07-02T09:32:54.327 回答
3

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

于 2013-07-02T00:41:13.287 回答
1

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

也许您同时在多个调用之间共享这个 WebClient 实例?

所以它变得混乱。这个或 URI 都会使 WebRequest 创建者感到困惑。

于 2017-08-24T19:44:13.537 回答