Uri.ToString () এবং Uri.AbsolveUri এর মধ্যে পার্থক্য কী?


92

ঠিক এখনই একটি অ্যাজুরে প্রশ্নের মন্তব্য হিসাবে, @ স্মারেক্স উল্লেখ করেছেন

আমি মনে করি blob.Uri.ToString () এর চেয়ে blob.Uri.AbsolveUri করা ভাল।

এরজন্য কি কোন কারণ আছে? Uri.AbsoluteUriনোটগুলির নথির জন্য যে এটি "পরম ইউআরআই Uri.ToString()পায় ", "নির্দিষ্ট উদাহরণের জন্য একটি প্রচলিত স্ট্রিং প্রতিনিধিত্ব করে।"


4
টোস্ট্রিং ইউআরআইকে আরও পঠনযোগ্য করে তোলে তবে এটি করার সময় এটি অনেকগুলি ইউআরএলএনকোডেড অক্ষরকে ডিকোড করে যা কিছু ক্ষেত্রে ঝামেলাজনক হবে। .नेट ফ্রেমওয়ার্কের রানটাইমগুলির মধ্যেও আচরণটি আলাদা। তুলনা করার জন্য 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 অন্যদিকে এনকোডযুক্ত ফর্মটি এইচটিটিপি ইউটিলিটি হিসাবে প্রত্যাবর্তন করবে l http://somehost/somepath?somekey=some%2bvalue


35
তবে মনে রাখবেন যে "মানব-পঠনযোগ্য ইউআরএল" (টোস্ট্রিং থেকে প্রত্যাবর্তিত) সম্ভবত দুর্নীতিগ্রস্থ এবং আপনি যা চান তা কখনই নয়: কোড . logos.com/blog/2010/08/uritostring_must_die.html । আমি যখনই সম্ভব টসস্ট্রিং কল করা এড়াতে চাই।
— ব্র্যাডলি গ্রেনার

4
এমন অনেক সময় আছে যখন আপনি টসস্ট্রিং চান না। এখানে এসও একটি দুর্দান্ত উদাহরণ (উপরে আমার উত্তর দেখুন)। আপনি URL টি "ভিজ্যুয়ালাইজ" করতে চান। পয়েন্টটি (সর্বদা প্রোগ্রামিংয়ের ক্ষেত্রে) হ'ল সতর্কতা অবলম্বন করুন এবং আপনি কী করছেন তা জানুন।
— ওফার জেলিগ

4
নোট করুন যে এখানে উদাহরণ (এবং কোড. logos.com/blog/2010/08/uritostring_must_die.html এ ) আর বর্তমান নেই। এই বিষয়গুলি। নেট ফ্রেমওয়ার্ক 4.5 এ স্থির করা হয়েছে। তবে, টসস্ট্রিং () এখনও কেবলমাত্র ইউআরএলের মানব পাঠযোগ্য (ভিজ্যুয়াল) উপস্থাপনার জন্য বোঝানো হয়েছে। আপনি যদি এই URL টি ব্রাউজারে অনুলিপি করেন তবে এটি এখনও কাজ করা উচিত should
— আরনি

4
এটা দেখে মনে হচ্ছে উত্তম ব্যবহার করতে 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

নিম্নলিখিত উদাহরণটি কনসোলটিতে উরি উদাহরণের সম্পূর্ণ বিষয়বস্তু লিখেছে। প্রদর্শিত উদাহরণে,

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);

AbsolveUri বৈশিষ্ট্যটিতে সমস্ত টুকরা এবং কোয়েরি স্ট্রিং সহ উরিরূপে সঞ্চিত পুরো ইউআরআই অন্তর্ভুক্ত রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.