WebClientリクエストの動詞を変更するにはどうしたらよいでしょうか?DownloadStringの場合もPOSTしか許可/デフォルトにならないようです。
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
代わりにHttpWebRequestを使用すれば、呼び出しの制御がより可能になります。REST動詞はMethodプロパティで変更可能です(デフォルトは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 ...)
.NETのソースコードを見るとわかるように、DownloadStringのHTTPメソッドは、プライベートWebClientインスタンスフィールドm_Methodの状態に依存し、新しいリクエストメソッド呼び出しごとにクリアされてnullになり(link)、Webリクエストクリエイター(URIに依存、例えばftpプロトコルでは別のクリエイターが得られる)にデフォルトが割り当てられますが、これはスレッドセーフとはなりません。
おそらく、このWebClientインスタンスを複数のコールで同時に共有しているのでは?
だから混乱するのです。これかURIがWebRequestの作成者を混乱させるかのどちらかです。