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



.net (3)

अभी एक Azure सवाल पर एक टिप्पणी के रूप में, @ smarx नोट किया

मुझे लगता है कि blob.Uri.AbsoluteUri blob.Uri.ToString () से सामान्य रूप से बेहतर है।

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

https://code.i-harness.com


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

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

इस मामले में, Uri.ToString() एक मानव-पठनीय यूआरएल वापस करेगा: http://somehost/somepath?somekey=some+value

Uri.AbsoluteUri दूसरी तरफ एन्कोडेड फॉर्म को HttpUtility के रूप में वापस कर http://somehost/somepath?somekey=some%2bvalue ने इसे वापस कर दिया: http://somehost/somepath?somekey=some%2bvalue


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

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

इसके अतिरिक्त: यदि आपका 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




.net