2009-01-26 3 views
67

Quelle est la meilleure façon de remplacer la partie hôte d'un Uri en utilisant .NET?Remplacer l'hôte dans Uri

i.e. .:

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:[email protected]/index.html", "newhostname"); 
Assert.AreEqual("http://user:[email protected]/index.html", s); 
//... 
string s = ReplaceHost("ftp://user:[email protected]", "newhostname"); 
Assert.AreEqual("ftp://user:[email protected]", s); 
//etc. 

System.Uri ne semble pas aider beaucoup.

Répondre

103

System.UriBuilder est ce que vous recherchez ...

string ReplaceHost(string original, string newHostName) { 
    var builder = new UriBuilder(original); 
    builder.Host = newHostName; 
    return builder.Uri.ToString(); 
} 
+0

Merci c'était exactement ce que je cherchais. –

+0

J'aurais recommandé la classe Uri, mais j'aurais eu tort. Bonne réponse. –

+0

Fonctionne bien, il suffit de noter que si vous lisez la propriété Query, il est précédé d'un?, Et si vous définissez la propriété de requête avec une chaîne commençant par?, Un autre? sera ajouté. – Dave

41

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; 
+2

Je suppose qu'il serait peut-être préférable d'obtenir l'instance 'Uri' en appelant' newUriBuilder.Uri' plutôt que de le formater et de l'analyser. – Sam

+0

@Sam vous avez raison, la propriété ['Uri'] (http://msdn.microsoft.com/en-us/library/system.uribuilder.uri.aspx) est une bien meilleure option. Merci. Actualisé. –

Questions connexes