2010-10-04 14 views
6

का उपयोग कर डेटा भेज रहा है। मैं एक आरईएसटी वेब सेवा के लिए एक साधारण पोस्ट अनुरोध भेजने की कोशिश कर रहा हूं और प्रतिक्रिया प्रिंट कर रहा हूं (कोड नीचे है, ज्यादातर याहू डेवलपर प्रलेखन से लिया गया है और एमएसडीएन कोड स्निपेट्स में से कुछ के साथ प्रदान किया गया है दस्तावेज़ीकरण)।सी # REST क्लाइंट POST

अनुरोध विधि:: पोस्ट (यानी मैं PHP में उम्मीद $ _SERVER [ 'REQUEST_METHOD'] == 'पोस्ट')
डाटा: foo = पट्टी (यानी $ _POST [ 'foo' मैं ग्राहक भेजने के लिए उम्मीद करेंगे

अनुरोध विधि:: FOO = BARPOST
डाटा: (खाली)

मैं एपीआई पता काम करता है मैं के रूप में PHP में] == 'बार')

हालांकि, यह भेजने किया जा रहा है मैंने पायथन और PHP में लिखे गए ग्राहकों के साथ इसका परीक्षण किया है, इसलिए मुझे पूरा यकीन है कि यह मेरे सी # के साथ एक समस्या होनी चाहिए। मैं व्यापार द्वारा एक .NET प्रोग्रामर नहीं हूं इसलिए समस्या का पता लगाने के तरीके पर किसी भी टिप्पणी/पॉइंटर्स की सराहना करेंगे - मुझे यकीन है कि यह कुछ मामूली है लेकिन मैं इसे स्वयं नहीं खोज सकता।

यूरी, उपयोगकर्ता और पासवर्ड चर कोड में पहले सेट हैं - वे जीईटी अनुरोधों के साथ ठीक काम करते हैं।

request = (HttpWebRequest) WebRequest.Create(uri); 
request.Credentials = new NetworkCredential(user, password); 
request.Method = WebRequestMethods.Http.Post; 
request.ContentType = "application/x-www-form-urlencoded"; 

string postData = "foo=bar"; 
request.ContentLength = postData.Length; 

StreamWriter postStream = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); 
postStream.Write(postData); 
postStream.Close(); 

response = (HttpWebResponse) request.GetResponse(); 

REST API PHP में लिखा है, और जब सी # क्लाइंट का उपयोग $ _POST सरणी सर्वर पर खाली है।

उत्तर

9

अंततः HttpWebRequest.PreAuthenticate संपत्ति जो समस्या को हल करने के लिए यदि कोड इसलिए की तरह संपादित किया जाता है लगता है पाया:

request = (HttpWebRequest) WebRequest.Create(uri); 
request.PreAuthenticate = true; 
request.Credentials = new NetworkCredential(user, password); 
request.Method = WebRequestMethods.Http.Post; 

प्रलेखन से वास्तविक पोस्ट अनुरोध भेजे जाने से पहले मैं इस बलों प्रमाणीकरण अनुमान। मुझे यकीन नहीं है कि कक्षा स्वचालित रूप से ऐसा क्यों नहीं करती है (अन्य भाषाओं के लिए पुस्तकालय इस प्रक्रिया को पारदर्शी बनाते हैं, जब तक कि आप इसे स्पष्ट रूप से बंद नहीं करते), लेकिन इसने मेरे लिए समस्या हल कर दी है और किसी और को खोज के 2 दिन बचा सकता है और बाल खींचने।

इसके लायक होने के लिए, पूर्व प्रमाणीकरण को जीईटी अनुरोधों के लिए सेट करने की आवश्यकता नहीं है, केवल पोस्ट करें, हालांकि यदि आप इसे जीईटी अनुरोध के लिए सेट करते हैं तो सब कुछ अभी भी काम करेगा, लेकिन थोड़ा अधिक समय लें।