System.Uri
にはHost
、Authority
、およびDnsSafeHost
があります。 MSは、Host
とDnsSafeHost
が異なる場合の素敵な例を提供します here 。
Host
とAuthority
についても同様の例/説明をお願いします。
はい、ブランドンは、素人の用語で、絶対に正しいです
権限=ホスト名+ポート番号
URLプロトコルがデフォルトポートを使用している場合、たとえばhttp URLにポート80を使用している場合、その場合のみAuthority = Host Name(ポート番号は80と想定)、
一方、ホスト名はドメイン名またはI.Pアドレスのいずれかです
例:
http://www.example.com/
Authority = www.example.com
ホスト名= www.example.com
http://255.255.255.255:8080/
Authority =255.255.255.255:8080
ホスト名= 255.255.255.255
MSDNから RI.Host ページ。
Authorityプロパティとは異なり、このプロパティ値にはポート番号は含まれません。
.NETのUriクラスの場合、Authorityにはポートが含まれますが、Hostには含まれず、ユーザー情報も含まれません。
有効なURIの例:
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));
ホストとポート番号だけではありません。
たとえば、次は有効なURIです。
http://user:password@Host:80/path
当局は
user:password@Host:80
アットマーク(@)はホストからのユーザー情報を区切り、コロン(:)はポート番号からホストを区切ります。ユーザー情報内で、コロン(:)はユーザー名とパスワードを区切ります。 (はい、パスワードの部分が廃止されていることは知っています。オプションでサポートされている可能性があります。)
これは機関の完全な仕様です。明らかに、ユーザー情報とポート番号はしばしば存在しません。
.NETのUriクラスは、権限を返すときにユーザー情報をドロップします。代わりに、UserInfoプロパティでユーザー情報を見つけることができます。
Uri.UserInfo
。NET Uriクラスに対してと言うことは、技術的には正しい答えです。権限とUri.Hostは、ホストにポート番号が含まれないことです。
ただし、Authorityは.NET Uriクラスで使用される方法で適切に定義されていないことに注意してください。
リンクしたドキュメントによると、Authority
プロパティはUriのデフォルトポートと同じでない場合、ポート番号を含みますが、Host
プロパティはDNSホストのみを返します名前またはIPアドレス。
それ以上の違いはないと思います。
すべてのHTTP URLは、汎用URIの構文に準拠しています。 URI汎用構文は、5つのコンポーネントの階層シーケンスで構成されています。
URI = scheme:[//authority]path[?query][#fragment]
authorityコンポーネントは3つのサブコンポーネントに分割されます。
authority = [userinfo@]Host[:port]
このような:
オプションのauthorityコンポーネントの前に2つのスラッシュ(//)があります。
詳細については、 https://en.wikipedia.org/wiki/URL を参照してください。