¿Cómo puedo cambiar el verbo de una petición WebClient? Parece que sólo permite/por defecto POST, incluso en el caso de 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;
}
Y Fiddler dice:
POST http://someservice?apikey=20130701-234126753-X7384&taskId=20130701-234126753-258877330210884 HTTP/1.1
Content-Length: 0
Si utilizas HttpWebRequest en su lugar obtendrías un mayor control de la llamada. Puede cambiar el verbo REST mediante la propiedad Method (por defecto es 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 ...)
Como se puede ver en el código fuente de .NET, el Método HTTP de la DownloadString depende del estado del campo de instancia privado de WebClient m_Method, que se borra a null en cada nueva llamada al método de petición (link) y por defecto al Creador de la petición Web (depende de la URI, por ejemplo el protocolo ftp obtiene otro creador), pero esto no es thread safe.
¿Quizás estás compartiendo esta instancia de WebClient entre varias llamadas simultáneamente?
Entonces se confunde. O esto o el URI confunde al creador de WebRequest.