¿Cuál es la mejor forma de reemplazar la parte de host de un Uri usando .NET?
Es decir:
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 no parece ayudar mucho.
Como dice @Ishmael, puede usar System.UriBuilder. He aquí un ejemplo:
// 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;
fuente
Uri
instancia llamando ennewUriBuilder.Uri
lugar de formatearla y analizarla.Uri
propiedad es una opción mucho mejor. Gracias. Actualizado..Uri
llamada. Si tiene algoUriBuilder
que no se traduce en un Uri válido, arrojará. Entonces, por ejemplo, si necesita un host comodín*
, puede configurarlo.Host
, pero si lo llama.Uri
arrojará. Si lo llamaUriBuilder.ToString()
, devolverá el Uri con el comodín en su lugar.