System.Uri
vardır Host
, Authority
ve DnsSafeHost
. MS burada ne zaman Host
ve ne zaman DnsSafeHost
farklı olduğuna dair güzel bir örnek sunar .
Ben için de benzer bir örnek / açıklama bekliyorum Host
ve Authority
.
Yanıtlar:
Evet Brandon, meslekten olmayanlar açısından kesinlikle haklı
Yetki = Ana Bilgisayar Adı + Bağlantı Noktası No
Ve URL protokolü varsayılan bir bağlantı noktası kullanıyorsa, http URL için bağlantı noktası 80 diyelim, o zaman sadece bu durumda Yetkili = Ana Bilgisayar Adı (Bağlantı Noktası No 80 olarak varsayılır),
Ana Bilgisayar Adı, Alan Adı veya IP Adresidir
Misal:
http://www.example.com/
Yetki = www.example.com
Ana Bilgisayar Adı = www.example.com
http://255.255.255.255:8080/
Yetki = 255.255.255.255:8080
Ana Bilgisayar Adı = 255.255.255.255
User Information
bölümü kaçırdı .
MSDN URI.Host sayfasından.
Authority özelliğinden farklı olarak, bu özellik değeri bağlantı noktası numarasını içermez.
Her HTTP URL'si, genel bir URI'nin sözdizimine uygundur. URI genel sözdizimi, beş bileşenden oluşan hiyerarşik bir diziden oluşur:
URI = scheme:[//authority]path[?query][#fragment]
nerede makam üç alt bileşenden içine bileşen böler:
authority = [userinfo@]host[:port]
Bunun gibi:
Önünde iki eğik çizgi (//) bulunan isteğe bağlı bir yetki bileşeni, aşağıdakileri içerir:
Daha fazla ayrıntı için https://en.wikipedia.org/wiki/URL adresine başvurabilirsiniz .
.NET'teki Uri sınıfı için, Otorite bağlantı noktasını içerir, Ana Bilgisayar içermez ve kullanıcı bilgilerini içermez.
Bazı geçerli URI örnekleri:
Uri u = new Uri("http://www.domain.com/path");
Assert.AreEqual("www.domain.com", u.Authority);
Assert.AreEqual("www.domain.com", u.Host);
Assert.AreEqual("http://www.domain.com", u.GetLeftPart(UriPartial.Authority));
u = new Uri("http://www.domain.com:8080/path");
Assert.AreEqual("www.domain.com:8080", u.Authority);
Assert.AreEqual("www.domain.com", u.Host);
Assert.AreEqual("http://www.domain.com:8080", u.GetLeftPart(UriPartial.Authority));
u = new Uri("http://user:password@host:555/path");
Assert.AreEqual("host:555", u.Authority);
Assert.AreEqual("host", u.Host);
Assert.AreEqual("http://user:password@host:555", u.GetLeftPart(UriPartial.Authority));
Göre RFC3986 , Kısım 3.2 Yetki içeriyor
Yalnızca ana bilgisayar ve bağlantı noktası numarası DEĞİL.
Örneğin, aşağıdaki geçerli bir URI'dir:
http://user:password@host:80/path
Kurumun bulunduğu
user:password@host:80
(@) Simgesi, kullanıcı bilgilerini ana bilgisayardan ayırır ve iki nokta (:) ana bilgisayarı bağlantı noktası numarasından ayırır. Kullanıcı bilgisinin içinde, iki nokta üst üste (:) kullanıcı adını paroladan ayırır. (Evet, şifre bölümünün kullanımdan kaldırıldığını biliyorum. Yine de isteğe bağlı olarak desteklenebilir.)
Bu, bir Otorite için tam özelliktir. Açıktır ki, kullanıcı bilgisi ve port numarası çoğu zaman mevcut değildir.
NET'te Uri sınıf kullanıcı bilgilerini düşer doğru değil çünkü oldukça rahatsız edici Yetkilisi döndürürken. Bunun yerine, kullanıcı bilgilerini UserInfo özelliğinde bulabilirsiniz:
Uri.UserInfo
.NET Uri sınıfı için Uri.Authority ve Uri.Host arasındaki farkın ana bilgisayarın bir bağlantı noktası numarası içermeyeceğini söylemek için diğer yanıtlar teknik olarak doğrudur .
Ancak lütfen Authority'nin .NET Uri sınıfında kullanıldığı şekilde doğru şekilde tanımlanmadığını bilin, çünkü kullanıcı bilgilerini de içerebilir.
Bağlandığınız belgelere göre, Authority
özellik Uri'nin varsayılan bağlantı noktasıyla aynı değilse bağlantı noktası numarasını içerecek, Host
özellik ise yalnızca DNS Ana Bilgisayar adını veya IP Adresini döndürecektir.
Bundan daha fazla farklılık olduğuna inanmıyorum.
Yetkili ayrıca bir kullanıcı adı ve şifre içerebilir, örn.
bob: pwd@somewhere.example.com
daha yaygın olarak FTP URI'leri için kullanılır