Qual é a melhor maneira de substituir a parte do host de um Uri usando o .NET?
Ie:
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 não parece ajudar muito.
Como @Ishmael diz, você pode usar System.UriBuilder. Aqui está um exemplo:
// 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;
fonte
Uri
instância chamando emnewUriBuilder.Uri
vez de formatá-la e analisá-la.Uri
imóvel é uma opção muito melhor. Obrigado. Atualizada..Uri
ligação. Se você tiver algoUriBuilder
que não se traduza em um Uri válido, ele será lançado. Por exemplo, se você precisa de um host curinga,*
pode defini.Host
-lo, mas se você chamá-.Uri
lo, ele será lançado. Se você ligar,UriBuilder.ToString()
ele retornará o Uri com o caractere curinga no lugar.