web-dev-qa-db-ja.com

WebClientリクエストでverb GETを使用する方法は?

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
27
FlavorScape

代わりにHttpWebRequestを使用すると、呼び出しをより詳細に制御できます。 MethodプロパティでREST verbを変更できます(デフォルトは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 ...)
35
Niklas Bjorkman

そのためにWebClientを使用できるかどうかはわかりません。しかし、HttpClient.GetAsyncメソッド(文字列)を使用しない理由 http://msdn.Microsoft.com/en-us/library/hh158944.aspx

3
jeffo

.NETのソースコードを見るとわかるように、 DownloadString のHTTPメソッドは、プライベートWebClientインスタンスフィールドm_Methodの状態に依存します。 link )およびWeb要求Creatorにデフォルト設定されます(たとえば、ftpプロトコルは別の作成者を取得します)が、これはスレッドセーフではありません。

おそらく、このWebClientインスタンスをいくつかの呼び出しで同時に共有しているのでしょうか?

混乱します。これまたはURIは、WebRequest作成者を混乱させます。

0
user3638471