Uri'de ana bilgisayarı değiştirin


88

.NET kullanarak bir Uri'nin ana bilgisayar kısmını değiştirmenin en güzel yolu nedir?

Yani:

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 pek yardımcı görünmüyor.

Yanıtlar:


149

System.UriBuilder , peşinde olduğunuz şey ...

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

1
Uri dersini tavsiye ederdim ama yanılmış olurdum. İyi cevap.
Jonathan C Dickinson

Harika çalışıyor, Sorgu özelliğini okursanız, başına bir? İşareti eklenir ve Sorgu Özelliğini? İle başlayan bir dizeyle ayarlarsanız başka? başa eklenecek.
Dave

Orijinal veya yeni olarak belirtilmişlerse, bağlantı noktalarını işlemeniz gerekir.
Öznel Gerçeklik

43

@Ishmael'in dediği gibi System.UriBuilder'ı kullanabilirsiniz. İşte bir örnek:

// 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;

3
Örneği biçimlendirip ayrıştırmaktansa Uriçağırarak elde etmenin daha iyi olabileceğinden şüpheleniyorum newUriBuilder.Uri.
Sam

@Sam haklısınız, Urimülk çok daha iyi bir seçenek. Teşekkürler. Güncellenmiş.
Drew Noakes

Dikkatle .Uriçağrısı. UriBuilderİçinde geçerli bir Uri'ye çevrilmeyen bir şey varsa , fırlatır. Örneğin, bir joker karakter barındırıcısına ihtiyacınız *varsa, bunu ayarlayabilirsiniz .Host, ancak ararsanız .Uriatar. Eğer ararsanız UriBuilder.ToString()o yerde joker ile Uri dönecektir.
CubanX
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.