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.