2010-06-02 14 views
8

एमएसडीएन साइट पर example of some C# code है जो दिखाता है कि पोस्ट किए गए डेटा के साथ वेब अनुरोध कैसे करें।सी # वेब अनुरोध पोस्ट एन्कोडिंग प्रश्न

WebRequest request = WebRequest.Create ("http://www.contoso.com/PostAccepter.aspx "); 
request.Method = "POST"; 
string postData = "This is a test that posts this string to a Web server."; 
byte[] byteArray = Encoding.UTF8.GetBytes (postData); // (*) 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = byteArray.Length; 
Stream dataStream = request.GetRequestStream(); 
dataStream.Write (byteArray, 0, byteArray.Length); 
dataStream.Close(); 
WebResponse response = request.GetResponse(); 
...more... 

लाइन में चिह्नित (*) लाइन है कि मुझे पहेली है: यहाँ है कि कोड का एक अंश है। क्या यूटीएफ 8 की बजाय UrlEncode विधि का उपयोग करके डेटा एन्कोड नहीं किया जाना चाहिए? क्या यह नहीं है कि application/x-www-form-urlencoded का तात्पर्य है?

उत्तर

11

नमूना कोड भ्रामक है, क्योंकि ContentType एप्लिकेशन/x-www-form-urlencoded पर सेट है लेकिन वास्तविक सामग्री सादा पाठ है। आवेदन/x-www फार्म-urlencoded इस तरह एक स्ट्रिंग है:

name1=value1&name2=value2 

UrlEncode समारोह '&' और '=' तो एक पार्सर उन्हें सिंटैक्स के रूप में विचार नहीं करता है की तरह अपवादभूत पात्रों से बचने के लिए प्रयोग किया जाता है। यह एक स्ट्रिंग (मीडिया प्रकार टेक्स्ट/सादा) लेता है और एक स्ट्रिंग (मीडिया प्रकार एप्लिकेशन/एक्स-www-form-urlencoded) देता है।

एन्कोडिंग .UTF8.GetBytes का उपयोग बाइट्स की एक सरणी में स्ट्रिंग (मीडिया प्रकार एप्लिकेशन/एक्स-www-form-urlencoded) को कन्वर्ट करने के लिए किया जाता है, जो WebRequest API की अपेक्षा करता है।

+0

आवेदन/x-www फार्म-urlencoded कर सकते हैं गैर ASCII वर्ण शामिल हैं? मैंने इसका मतलब मतलब नहीं किया। http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1 या क्या मैं इसे गलत समझ रहा हूं? –

+0

जैसा कि मार्टिन स्मिथ ऊपर नोट करता है, 'एप्लिकेशन/एक्स-www-form-urlencoded' इंगित करता है कि सामग्री को एक विशिष्ट तरीके से एन्कोड किया गया है। Encoding.UTF8 का उपयोग कैसे करते हैं? – rlandster

+0

@ मार्टिन स्मिथ: पता नहीं। नामों और मानों को एन्कोड करने के लिए बस UrlEncode फ़ंक्शन का उपयोग करें और आपको ठीक होना चाहिए। मुझे लगता है कि नमूना यूटीएफ 8 का उपयोग करता है क्योंकि सी # में शाब्दिक तार क्या हैं। –

9

मैक्स टोरो के अनुसार, एमएसडीएन साइट पर उदाहरण गलत हैं: एक सही फॉर्म POST को डेटा को यूआरएल एन्कोड करने की आवश्यकता होती है; चूंकि एमएसडीएन उदाहरण में डेटा में कोई वर्ण नहीं है जो एन्कोडिंग द्वारा बदला जाएगा, वे एक अर्थ में पहले से ही एन्कोड किए गए हैं।

सही कोड System.Web.HttpUtility.UrlEncodename1=value1&name2=value2 स्ट्रिंग में संयोजन करने से पहले प्रत्येक नाम/मूल्य जोड़ी के नामों और मानों पर कॉल करेगा।

यह पृष्ठ मददगार था: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx