Quelle est la meilleure façon de remplacer la partie hôte d'un Uri à l'aide de .NET?
C'est à dire:
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 ne semble pas beaucoup aider.
Comme le dit @Ishmael, vous pouvez utiliser System.UriBuilder. Voici un exemple:
// 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;
la source
Uri
instance en l'appelantnewUriBuilder.Uri
plutôt qu'en la formatant et en l'analysant.Uri
propriété est une bien meilleure option. Merci. Mis à jour..Uri
appel. Si vous avez quelque chose en celaUriBuilder
qui ne se traduit pas par un Uri valide, il lancera. Ainsi, par exemple, si vous avez besoin d'un hôte générique,*
vous pouvez le définir.Host
, mais si vous l'appelez,.Uri
il le lancera. Si vous appelez,UriBuilder.ToString()
il renverra l'URI avec le caractère générique en place.