Jaki jest najładniejszy sposób zastąpienia części hosta Uri przy użyciu platformy .NET?
To znaczy:
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 nie wydaje się zbytnio pomagać.
Jak mówi @Ishmael, możesz użyć System.UriBuilder. Oto przykład:
// 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;
źródło
Uri
instancję przez wywołanie,newUriBuilder.Uri
a nie formatowanie i analizowanie.Uri
nieruchomość jest znacznie lepszą opcją. Dzięki. Zaktualizowano..Uri
rozmowę. Jeśli masz w sobie coś,UriBuilder
co nie jest tłumaczone na prawidłowy Uri, to zostanie rzucone. Na przykład, jeśli potrzebujesz hosta wieloznacznego,*
możesz go ustawić.Host
, ale jeśli zadzwonisz.Uri
, wyrzuci. Jeśli zadzwoniszUriBuilder.ToString()
, zwróci Uri z umieszczonym symbolem wieloznacznym.