2009-05-25 11 views
11

के साथ मैं सी # में WebRequest का उपयोग कर साइट पर एक पोस्ट करने की कोशिश कर रहा हूं। जिस साइट पर मैं पोस्ट कर रहा हूं वह एक एसएमएस साइट है, और messagetext यूआरएल का हिस्सा है। यूआरएल में रिक्त स्थान से बचने के लिए मैं URL को एन्कोड करने के लिए HttpUtility.Encode() को कॉल कर रहा हूं।"यूआरआई का प्रारूप निर्धारित नहीं किया जा सका" WebRequest

लेकिन मैं एक URIFormatException मिलती रहती है - "अवैध यूआरआई: URI का स्वरूप निर्धारित नहीं किया जा सकता है" - जब मैं इस के समान कोड का उपयोग करें:

string url = "http://www.stackoverflow.com?question=a sentence with spaces"; 
string encoded = HttpUtility.UrlEncode(url); 

WebRequest r = WebRequest.Create(encoded); 
r.Method = "POST"; 
r.ContentLength = encoded.Length; 
WebResponse response = r.GetResponse(); 

अपवाद तब होता है जब मैं फोन WebRequest.Create()।

मैं क्या गलत कर रहा हूं?

उत्तर

16

आप केवल तर्क, नहीं पूरे यूआरएल सांकेतिक शब्दों में बदलना है, तो प्रयास करना चाहिए:

string url = "http://www.stackoverflow.com?question=" + HttpUtility.UrlEncode("a sentence with spaces"); 

WebRequest r = WebRequest.Create(url); 
r.Method = "POST"; 
r.ContentLength = encoded.Length; 
WebResponse response = r.GetResponse(); 

एन्कोडिंग पूरे यूआरएल का मतलब होगा: // और? एन्कोड भी प्राप्त करें। एन्कोडेड स्ट्रिंग तब मान्य यूआरएल नहीं है।

+0

जैसा कि [इस SO पोस्ट] में चर्चा की गई है (http://stackoverflow.com/a/1148326/5838198), 'HttpUtility' या' सर्वर' विधियों के बजाय 'Uri.EscapeDataString() 'का उपयोग करना सबसे अच्छा है । – Siavas

1

UrlEncode केवल क्वेरी स्ट्रिंग पर उपयोग किया जाना चाहिए। इस प्रयास करें:

string query = "a sentence with spaces"; 
string encoded = "http://www.stackoverflow.com/?question=" + HttpUtility.UrlEncode(query); 

अपने कोड के वर्तमान संस्करण स्लैश और यूआरएल, जो webrequest भ्रामक में पेट के urlencoding है।

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