System.Urivardır Host, Authorityve DnsSafeHost. MS burada ne zaman Hostve ne zaman DnsSafeHostfarklı olduğuna dair güzel bir örnek sunar .
Ben için de benzer bir örnek / açıklama bekliyorum Hostve 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 Informationbö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