2011-09-05 11 views
7

मान लीजिए मैं निम्नलिखित स्ट्रिंग से एक उरी वस्तु बनाने के लिए करना चाहते हैं:.NET में एक उरी बनाना स्वचालित रूप से पारित कर दिया स्ट्रिंग से सभी मापदंडों urldecodes

string url = @"http://someserver.com?param1=1&url=http%3a%2f%2fwww.otherserver.com"; 
Uri uri = new Uri(url, UriKind.Absolute); 

अपेक्षित परिणाम होगा:

http://someserver.com?param1=1&url=http%3a%2f%2fwww.otherserver.com 

प्राप्त:

http://someserver.com/?param1=1&url=http://www.otherserver.com 

उड़ी निर्माण की अनुमति देने वाले कई संबंधित तरीकों में वही व्यवहार देखा जाता है: उरी। ट्रीक्रेट, UriBuilder.Uri, आदि

प्रारंभिक एन्कोडेड पैरामीटर को संरक्षित करने वाले उरी को मैं कैसे प्राप्त करूं?

+0

क्या करने का अपेक्षित परिणाम? यदि मैं कंसोल एप्लिकेशन 'कंसोल। RiteLine (uri.AbsoluteUri) में अपना कोड आज़माता हूं, तो इसके बारे में अन्य खोज के लिए एन्कोडेड यूआरएल –

+1

लौटाता है। यह वास्तव में ToString() विधि है जो स्ट्रिंग को डीकोड करता है। OriginalString या .AbsoluteUri एन्कोडेड स्ट्रिंग को वापस कर देगा। एक सापेक्ष यूआरएल के लिए, .PathAndQuery – jishi

उत्तर

3

यह व्यवहार documented है:

कुछ योजनाओं के लिए निर्माता में कैनॉनिकलाइज़ेशन के हिस्से के रूप बच गए अभ्यावेदन जमा कर रहे हैं। जिन योजनाओं के लिए यूआरआई कॉम्पैक्ट से बचने वाले अनुक्रमों में निम्न शामिल हैं: फ़ाइल, http, https, net.pipe, और net.tcp। अन्य सभी योजनाओं के लिए, बच निकले अनुक्रम कॉम्पैक्ट नहीं हैं। उदाहरण के लिए: यदि आप दो बिंदुओं को एन्कोड करते हैं ".." "% 2E% 2E" के बाद यूआरआई कन्स्ट्रक्टर कुछ अनुक्रमों को योजनाओं के लिए कॉम्पैक्ट करेगा। उदाहरण के लिए, निम्नलिखित कोड नमूना http योजना के लिए एक यूआरआई कन्स्ट्रक्टर दिखाता है।

तो एक वैकल्पिक हल अस्थायी रूप से एक कस्टम योजना (जैसे leavemealone://) का उपयोग यूआरएल वस्तुओं के निर्माण के लिए हो सकता है (संभवतः UriBuilder के माध्यम से?)।

4

आपने यूआरएल को "प्राप्त" कैसे किया? अगर मैं विजुअल स्टूडियो में अपने माउस को घुमाता हूं, तो यह वास्तव में डीकोडेड यूआरएल दिखाता है।

लेकिन जब भी मैं इसे AbsoluteUri संपत्ति के माध्यम से एक्सेस करता हूं, तो यह एन्कोडेड यूआरएल दिखाता है।

+0

का उपयोग करें, ठीक है, मैं देखे गए व्यवहार का वर्णन कर रहा हूं। यह एक एएसपीएनटी एमवीसी ऐप है लेकिन इससे कोई फर्क नहीं पड़ता। –

+0

मैंने नहीं पूछा कि, मैंने पूछा। – CodeCaster

+0

ओओप्स क्षमा करें। मैंने एएसपीएनटी एमवीसी रूटिंग का उपयोग करके गठित किया लेकिन मुझे इसके लिए कुछ tweeks बनाने की जरूरत है। –

0

मेरे मामले में मैंने उसी वर्ग की उरी संपत्ति का उपयोग करने के बजाय उरीबिल्डर वर्ग की ToString() विधि को वापस कर हल किया।

4

.NET4 में आप निश्चित योजना via a configuration के लिए उरी संघनन निष्क्रिय कर सकते हैं:

<configuration> 
    <uri> 
    <schemeSettings> 
     <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/> 
    </schemeSettings> 
    </uri> 
</configuration> 

नोट डिफ़ॉल्ट व्यवहार को अक्षम करने के लिए संबंधित सुरक्षा के प्रभाव देखते हैं कि।

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