উরিতে হোস্ট প্রতিস্থাপন করুন


88

.NET ব্যবহার করে কোনও উরির হোস্ট-অংশটি প্রতিস্থাপনের সর্বোত্তম উপায় কী?

অর্থাৎ:

string ReplaceHost(string original, string newHostName);
//...
string s = ReplaceHost("http://oldhostname/index.html", "newhostname");
Assert.AreEqual("http://newhostname/index.html", s);
//...
string s = ReplaceHost("http://user:pass@oldhostname/index.html", "newhostname");
Assert.AreEqual("http://user:pass@newhostname/index.html", s);
//...
string s = ReplaceHost("ftp://user:pass@oldhostname", "newhostname");
Assert.AreEqual("ftp://user:pass@newhostname", s);
//etc.

System.Uri তেমন কোনও সহায়ক বলে মনে হয় না।

উত্তর:


149

System.UriBuilder আপনি যা পরে ...

string ReplaceHost(string original, string newHostName) {
    var builder = new UriBuilder(original);
    builder.Host = newHostName;
    return builder.Uri.ToString();
}

4
আমি উরি ক্লাসে সুপারিশ করতাম তবে ভুল হতাম। ভাল উত্তর.
জোনাথন সি ডিকিনসন

দুর্দান্ত কাজ করে, কেবল লক্ষ্য করুন যে আপনি কোয়েরি সম্পত্তিটি পড়লে এটি একটি? দিয়ে চাপানো হয়, এবং যদি আপনি কোয়েরি সম্পত্তিটি একটি স্ট্রিং দিয়ে শুরু করেন?, অন্যটি দিয়ে? চাপ দেওয়া হবে।
ডেভ

আপনার পোর্টগুলি পরিচালনা করতে হবে, যদি সেগুলি মূল বা নতুন কোনও ক্ষেত্রে নির্দিষ্ট করা থাকে।
বিষয়গত বাস্তবতা

43

@ ইসমাইল যেমন বলেছে, আপনি System.UriBuilder ব্যবহার করতে পারেন। এখানে একটি উদাহরণ:

// the URI for which you want to change the host name
var oldUri = Request.Url;

// create a new UriBuilder, which copies all fragments of the source URI
var newUriBuilder = new UriBuilder(oldUri);

// set the new host (you can set other properties too)
newUriBuilder.Host = "newhost.com";

// get a Uri instance from the UriBuilder
var newUri = newUriBuilder.Uri;

4
আমি সন্দেহ করি যে ফর্ম্যাট এবং পার্স করার পরিবর্তে Uriকল করে উদাহরণটি পাওয়া আরও ভাল newUriBuilder.Uri
স্যাম

@ সাম আপনি ঠিক বলেছেন, Uriসম্পত্তি একটি আরও ভাল বিকল্প। ধন্যবাদ আপডেট হয়েছে।
ড্র নোকস

.Uriকল যত্নবান । যদি আপনার এমন কিছু থাকে যা UriBuilderবৈধ উরিতে অনুবাদ করে না তবে এটি নিক্ষেপ করবে। সুতরাং উদাহরণস্বরূপ যদি আপনার কোনও ওয়াইল্ডকার্ড হোস্টের প্রয়োজন হয় তবে আপনি *এটি সেট করতে পারেন .Host, তবে আপনি যদি কল করেন তবে .Uriএটি নিক্ষেপ করবে। আপনি যদি কল করেন তবে UriBuilder.ToString()এটি জায়গায় ওয়াইল্ডকার্ড সহ উরি ফিরিয়ে দেবে।
কিউবানএক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.