2008-10-19 15 views
5

मैं इसे देख रहा हूं और ऐसा लगता है कि यह मूल रूप से टूटा हुआ है।क्या System.Uri का उपयोग करने का कोई कारण है?

  • केवल 5 उदाहरण विधियां अप्रचलित नहीं चिह्नित हैं।
  • पार्स क्वेरी-स्ट्रिंग चर के किसी भी अंतर्निहित तरीके से प्रतीत नहीं होता है।
  • उरी को बदलने के लिए कोई तरीका नहीं है, उदाहरण के लिए एक नया क्वेरी चर शामिल करना।
  • HttpUtility तार पर काम करता है, नहीं यूआरआई

तो वहाँ कुछ भी इसके लिए अच्छा है? क्या मैं वास्तव में केवल तारों के बजाय इसका उपयोग कर रहा हूं?

उत्तर

1

उरीबिल्डर उत्परिवर्तन के लिए है। HttpUtility के बारे में जानना भी अच्छा है (उदा। क्वेरी स्ट्रिंग पार्सिंग के लिए)।

http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx

http://msdn.microsoft.com/en-us/library/system.web.httputility.parsequerystring.aspx

+0

मैं एचटीपीटीटीटी के बारे में अच्छी तरह से जानता हूं, लेकिन यह स्ट्रिंग्स पर काम करता है जो यूआरआई नहीं है। –

+1

लेकिन यह बात है। आप क्वेरी स्ट्रिंग को पार्स करने के लिए Uri.Query के साथ इसका उपयोग कर सकते हैं। –

8

मैं नहीं कहूंगा कि उरी वर्ग मौलिक बिल्कुल टूट गया है। उरी वर्ग का उद्देश्य एक यूआरआई का एक कॉम्पैक्ट और मानक प्रतिनिधित्व प्रदान करना है। उरी कक्षा यूआरआई को एक कैनोलिक रूप में वापस करने और आईपीवी 4 और आईपीवी 6 नोटेशन, और आईआरआई समर्थन के लिए समर्थन प्रदान करने के लिए आवश्यक सभी तर्कों को समाहित करती है।

उरी कक्षा को उरी को बदलने के बाद इसे बदलने की अनुमति देने के लिए डिज़ाइन नहीं किया गया है; यदि आप उत्परिवर्तन के उस स्तर को चाहते हैं तो आपको इसके बजाय यूरीबिल्डर का उपयोग करना चाहिए।

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

+1

एक स्ट्रिंग भी एक यूआरआई के "कॉम्पैक्ट और मानक प्रतिनिधित्व" प्रदान करता है। और एक यूआरआई को वास्तव में मान्य करने का एकमात्र तरीका संसाधन को प्रश्न में कॉल करना है, क्योंकि प्रत्येक संसाधन के अपने नियम होते हैं। –

+0

यदि आप संसाधन को सत्यापित करने के बारे में बात कर रहे हैं, हां, लेकिन उरी कक्षा मान्य करेगी कि पता अच्छी तरह से गठित है, जो अलग है। एक स्ट्रिंग आपको आसानी से रिश्तेदार यूआरआई बनाने की अनुमति नहीं देती है, आसानी से निर्धारित करती है कि दिया गया यूआरआई पूर्ण है या नहीं, आदि –

+1

भी उरी यूआरआई को कैनोनिकल कर देगा जो कुछ अनुप्रयोगों में बहुत महत्वपूर्ण हो सकता है – RobV

3

यह आपके द्वारा किए जा रहे कार्यों पर निर्भर करता है। मैं कम से कम एक परिदृश्य के बारे में सोच सकता हूं जहां मैं इसका उपयोग करूंगा, और यह रिश्तेदार यूआरएल को पूर्ण रूप से बदलना है। कहें, उदाहरण के लिए, आपके पास कुछ HTML है जिसे आपने कहीं भी खींचा है लेकिन आपको जरूरी नहीं है कि यूआरएल सापेक्ष या पूर्ण है या नहीं। आप अपनी खुद की पार्स तर्क लिख सकता है, या आप की तरह उरी वर्ग इस्तेमाल कर सकते हैं:

Uri link = new Uri(new Uri(webSiteAddress), linkPulledFromSite); 
string absoluteUrl = link.AbsoluteUri; 

तो आप आसानी से चिंता किए बिना निरपेक्ष URL होगा। यह सब सिर्फ आप क्या कर रहे हैं इस पर निर्भर करता है :-)

+0

ठीक है, यह निफ्टी चाल है। लेकिन यह वास्तव में उरी कक्षा को पूरी तरह से उचित नहीं ठहराता है। –

0

सभी फ़ाइल कक्षाएं और वेब कक्षाएं गैर-कानूनी तार क्यों लेती हैं? .NET Framework Designers वास्तव में इस तरह स्ट्रिंग encapsulation कक्षाओं पर गेंद गिरा दिया।

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

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