2013-11-15 2 views
5

कुछ लेकिन की प्रतिक्रिया यह हो जाता है कि किस तरह की ...Uri.EscapeUriString धनुकोष्ठक एक अजीब सवाल का

अगर मैं एक सांत्वना अनुप्रयोग (वी.एस. 2013 नेट 4.5.1) कोड देख सकते हैं और इस लाइन पर अमल अगर मैं एक ही बात पर अमल (

[

हालांकि: कोड की:

Uri.EscapeUriString("[")

मैं इस मिल ठीक है, तकनीकी रूप से Uri.EscapeUriString("[").Dump()) LINQPad मेरी मशीन पर में मैं इस मिल:

%5B

आगे, चीजों को मुश्किल करने के लिए according to this postUri.EscapeUriString("[") वास्तव में लौटना चाहिए %5B व्याप्ति पद 27/06/2012 पर लिखा गया था।

मुझे लगता है कि शायद LINQPad वीएस द्वारा उपयोग किए जाने वाले पुराने डीएलएल का संदर्भ दे रहा है, लेकिन इसका मतलब यह होगा कि EscapeUriString अपेक्षाकृत हाल ही में बदल गया है, जिसे मुझे कोई रिकॉर्ड नहीं मिल रहा है। क्या किसी के पास कोई विचार है कि इस व्यवहार के कारण क्या हो सकता है?

+0

WT में तय किया गया था? मैं 4.5.1 में repro कर सकते हैं! –

उत्तर

5

यह .Net 4 और .Net 4.5 के बीच बदल गया है, जिसे आप फ्रेमवर्क संस्करण को .NET 4 में पुन: लक्षित करके और परीक्षण प्रोग्राम चलाकर सत्यापित कर सकते हैं।

नेट 4 -> आउटपुट "% 5 ब" .net 4.5 (या बाद में) -> आउटपुट "["

यह यहां बताया गया है: Uri.EscapeDataString के लिए Application Compatibility in the .NET Framework 4.5

धारा के तहत

, Uri.EscapeUriString, और Uri.UnescapeDataString, जिसमें कहा गया है कि (नेट 4.5 के साथ):

आरक्षित और अनारक्षित अक्षरों की सूची अब RFC 3986 का समर्थन करता है।

विशिष्ट परिवर्तन:

Unreserved escaped characters are un-escaped. 
EscapeDataString escapes reserved characters based on RFC 3986. 
EscapeUriString does not escape reserved characters. 
UnescapeDataString does not throw an exception if it encounters an invalid escape sequence. 

विशेष रूप से, यह EscapeUriString जो महत्वपूर्ण है आरक्षित वर्ण बच नहीं करता है।

2

नया व्यवहार RFC 2396 के अनुसार सही एक प्रतीत होता है। लाइन 566 में यह कहा गया है:

566. Other characters are excluded because gateways and other transport 
567. agents are known to sometimes modify such characters, or they are 
568. used as delimiters. 
569. 
570. unwise  = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`" 

Uri.EscapeUriString के प्रलेखन में यह कहा गया है कि

डिफ़ॉल्ट रूप से, EscapeUriString विधि सभी पात्रों, उनके हेक्साडेसिमल प्रतिनिधित्व करने के लिए धर्मान्तरित आरएफसी 2396 अनारक्षित पात्रों को छोड़कर,

तो ऐसा लगता है कि .NET 4.0 पर एक बग था जो 4.5.1

+0

गलत। .NET 4 तक।0, आरएफसी 23 9 6 सही ढंग से पालन किया जाता है। जिन पात्रों से बच नहीं है वे लाइन 46 9 पर सूचीबद्ध हैं, न कि 570. डॉट नेट 4.5.1 वास्तव में आरएफसी 3 9 86 के उसी खंड में सूचीबद्ध पात्रों का पालन करता है, जो अलग हैं। –

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