Как лучше всего заменить хост-часть URI с помощью .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, похоже, не сильно помогает.
Как говорит @Ishmael, вы можете использовать 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;
источник
Uri
экземпляр путем вызова,newUriBuilder.Uri
а не форматирования и анализа.Uri
недвижимость намного лучше. Спасибо. Обновлено..Uri
звонку. Если у вас есть что-то,UriBuilder
что не переводится в действительный Uri, оно будет брошено. Так, например, если вам нужен хост с подстановочными знаками,*
вы можете установить.Host
его, но если вы вызовете,.Uri
он выдаст. Если вы вызовете,UriBuilder.ToString()
он вернет Uri с подстановочным знаком.