2013-07-02 1 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를 사용하면 통화를보다 잘 제어 할 수 있습니다. 하나는 .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

당신이 그것을 위해 웹 클라이언트를 사용할 수 있는지 확실하지. 하지만 HttpClient.GetAsync 메서드 (String)를 사용하지 않는 이유는 무엇입니까? 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 방법은 개인 웹 클라이언트 인스턴스 필드의 상태에 따라 달라집니다 m_Method는 새로운 요청 메소드 호출 (link)마다 null로 초기화되고 웹 요청 작성자 (URI에 따라 다릅니다. 예 : ftp 프로토콜이 다른 작성자를 얻음)로 설정되지만 스레드 안전하지 않습니다.

아마도이 호출을 여러 호출 중에서이 WebClient 인스턴스를 공유하고 있습니까?

그래서 혼란스러워집니다. 이 또는 URI는 WebRequest 생성자를 혼란스럽게합니다.