Uri.ToString () और Uri.AbsoluteUri के बीच क्या अंतर है?


92

एक Azure प्रश्न के लिए अभी टिप्पणी के रूप में, @smarx ने उल्लेख किया

मुझे लगता है कि आमतौर पर blob.Uri.AbsoluteUri को blob.Uri.ToString () की तुलना में करना बेहतर है।

क्या इसका कोई कारण है? Uri.AbsoluteUriनोट के लिए प्रलेखन कि यह "पूर्ण यूआरआई हो जाता है", Uri.ToString()"निर्दिष्ट उदाहरण के लिए एक कैनोनिकल स्ट्रिंग प्रतिनिधित्व हो जाता है।"


1
ToString URI को अधिक पठनीय बनाता है लेकिन ऐसा करते समय, यह कई URLEncoded वर्णों को डिकोड करता है, जो कुछ मामलों में परेशानी भरा होगा। .Net फ्रेमवर्क के रनटाइम के बीच व्यवहार भी भिन्न होता है। तुलना के लिए dhvik.blogspot.com/2019/12/… देखें ।
— दान

जवाबों:


103

उदाहरण के लिए दिया गया:

UriBuilder builder = new UriBuilder("http://somehost/somepath");
builder.Query = "somekey=" + HttpUtility.UrlEncode("some+value");
Uri someUri = builder.Uri;

इस स्थिति में, Uri.ToString()एक मानव-पठनीय URL लौटाएगा : http: // somehost / somepath? Somekey = some + value

Uri.AbsoluteUri दूसरी ओर HttpUtility.UrlEncode के रूप में एन्कोडेड फॉर्म को लौटा देगा: http://somehost/somepath?somekey=some%2bvalue


35
लेकिन ध्यान दें कि "मानव-पठनीय URL" (ToString से लौटा) संभवतः दूषित है और लगभग कभी भी आप क्या चाहते हैं: code.logos.com/blog/2010/08/uritostring_must_die.html । मैं जब भी संभव हो ToString को कॉल करने से बचूँगा।
— ब्रैडली ग्रिंजर

1
कई बार आप ToString चाहते हैं। यहाँ SO में एक महान उदाहरण है (ऊपर मेरा उत्तर देखें)। आप URL को "विज़ुअलाइज़" करना चाहते हैं। बिंदु (हमेशा प्रोग्रामिंग में) है - सावधान रहें, और जानें कि आप क्या कर रहे हैं।
— ज़ेलिग

3
ध्यान दें कि यहां (और code.logos.com/blog/2010/08/uritostring_must_die.html में ) उदाहरण अब चालू नहीं हैं। इन मुद्दों को .NET फ्रेमवर्क 4.5 में तय किया गया है। हालाँकि, ToString () अभी भी केवल URL के मानव पठनीय (दृश्य) प्रतिनिधित्व के लिए है। यदि आप इस URL को ब्राउज़र में कॉपी करते हैं, तो भी यह काम करना चाहिए।
— अरनी

1
ऐसा लगता है कि इसका उपयोग करना सबसे अच्छा OriginialStringहै ToString()[ docs.microsoft.com/en-us/dotnet/api/…
— karsnen

31

इसके अतिरिक्त: यदि आपका Uriकोई रिश्तेदार Uri AbsoluteUri असफल है, तो ToString()नहीं।

Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string str1 = uri.ToString(); // "fuu/bar.xyz"
string str2 = uri.AbsoluteUri; // InvalidOperationException

5

चूंकि हर कोई लगता है कि uri.AbsoluteUriबेहतर है, लेकिन क्योंकि यह सापेक्ष रास्तों से विफल होता है, तो शायद सार्वभौमिक तरीका होगा:

Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string notCorruptUri = Uri.EscapeUriString(uri.ToString());


0

निम्न उदाहरण कंसोल को Uri उदाहरण की पूरी सामग्री लिखता है। दिखाए गए उदाहरण में,

http://www.cartechnewz.com/catalog/shownew.htm?date=today

कंसोल के लिए लिखा है।

Uri baseUri = new Uri("http://www.cartechnewz.com");
Uri myUri = new Uri(baseUri, "catalog/shownew.htm?date=today");
Console.WriteLine(myUri.AbsoluteUri);

संपूर्ण सम्पत्ति में Uri उदाहरण में संग्रहीत संपूर्ण URI शामिल है, जिसमें सभी टुकड़े और क्वेरी स्ट्रिंग शामिल हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.