2013-07-02 5 views
17

WebClientリクエストの動詞を変更するにはどうすればよいですか?これは、DownloadStringの場合でも、POSTにのみ/デフォルトを許可するようです。WebClientリクエストで動詞GETを使用するには?

 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 
+1

[DownloadString](http://msdn.microsoft.com/en-us/library/fhd1f0sw.aspx)はGETを使用しています。 "... HTTPリソースの場合、GETメソッド使用されている"。 –

+0

奇妙なことに、私は "ダウンロード"メソッドがGETを使うと考えました。これが私のコードの全体です。 – FlavorScape

+0

'WebClient'はカスタムクラスではありませんか? –

答えて

24

代わりにHttpWebRequestを使うと、より多くの呼び出しを制御できます。あなたは1は、.NETのソースコードに見ることができるように

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 ...) 
+2

これは動作します。私はちょうどなぜこのWebClientがダウンロードのためにPOSTを使用するのか不思議です – FlavorScape

2

あなたはそのためのWebクライアントを使用することができるかどうかわかりません。しかし、なぜHttpClient.GetAsyncメソッド(文字列)を使用しないでくださいhttp://msdn.microsoft.com/en-us/library/hh158944.aspx

+3

hm。私は呼び出し元をブロックし、非同期要求を使用しないようにします。もう一つの奇妙なことは、HttpClientは私の4.5プロジェクトでSystem.Net.Httpという名前空間にはないということです。実際、System.Net.Httpは存在しません。 – FlavorScape

0

(デフォルトはGETです)メソッドのプロパティでREST動詞を変更することができ、DownloadStringのHTTPメソッドは、民間のWebClientインスタンスフィールドの状態に依存します新しい要求メソッド呼び出し(link)ごとにnullにクリアされ、デフォルトでWeb要求Creator(URIに依存します。たとえば、ftpプロトコルが別の作成者を取得します)が、これはスレッドセーフではありません。

複数のコールでこのWebClientインスタンスを同時に共有しているのでしょうか?

だから、混乱します。これまたはURIのどちらかがWebRequestの作成者を混乱させます。

関連する問題