2013-07-02 8 views
17

मैं वेब क्लाइंट अनुरोध के क्रिया को कैसे बदल सकता हूं? ऐसा लगता है कि डाउनलोडस्ट्रिंग के मामले में भी पोस्ट/डिफ़ॉल्ट पोस्ट करने की अनुमति है।वेब क्लाइंट अनुरोध के साथ क्रिया का उपयोग कैसे करें?

 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

आप कहीं कुछ खास कर रहे हैं - [डाउनलोडस्ट्रिंग] (http://msdn.microsoft.com/en-us/library/fhd1f0sw.aspx) जीईटी का उपयोग करता है: "... एक HTTP संसाधन के लिए, जीईटी विधि प्रयोग किया जाता है"। –

+0

अजीब, मुझे लगा कि "डाउनलोड" विधियां जीईटी का उपयोग करेंगी। इस अनुरोध के लिए मेरे कोड की पूरी बात है। – FlavorScape

+0

क्या आप पूरी तरह से सुनिश्चित हैं कि 'वेब क्लाइंट' एक कस्टम क्लास नहीं है? –

उत्तर

24

यदि आप HttpWebRequest का उपयोग करते हैं तो आपको कॉल का अधिक नियंत्रण नहीं मिलेगा। आप विधि संपत्ति से बाकी क्रिया को बदल सकते हैं (डिफ़ॉल्ट प्राप्त है)

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

यह काम करेगा। मैं सिर्फ उत्सुक हूं कि इस मामले में वेब क्लाइंट डाउनलोड के लिए भी पोस्ट का उपयोग करता है – FlavorScape

2

में सुनिश्चित नहीं हैं कि के लिए WebClient उपयोग कर सकते हैं। लेकिन क्यों नहीं HttpClient.GetAsync विधि (स्ट्रिंग) http://msdn.microsoft.com/en-us/library/hh158944.aspx

+3

एचएम। मैं कॉलर को अवरुद्ध करना चाहता हूं और असीमित अनुरोध का उपयोग नहीं करना चाहता हूं। एक और अजीब चीज है एचटीपी क्लाइंट अपने 4.5 प्रोजेक्ट में Systempet System.Net.Http के तहत नहीं है, वास्तव में System.Net.Http मौजूद नहीं है। – FlavorScape

0

एक नेट के स्रोत कोड में देख सकते हैं, DownloadString की HTTP पद्धति निजी WebClient उदाहरण क्षेत्र की स्थिति पर निर्भर करता है m_Method, जिसे प्रत्येक नए अनुरोध विधि कॉल (link) पर शून्य करने के लिए साफ़ किया गया है और वेब अनुरोध निर्माता के लिए डिफ़ॉल्ट (यूआरआई पर निर्भर करता है, उदाहरण के लिए ftp प्रोटोकॉल को अन्य निर्माता मिलते हैं), लेकिन यह थ्रेड सुरक्षित नहीं है।

शायद आप इस वेब क्लाइंट इंस्टेंस को कई कॉलों के साथ साझा कर रहे हैं?

तो यह भ्रमित हो जाता है। या तो यह या यूआरआई WebRequest निर्माता को भ्रमित करता है।

संबंधित मुद्दे