URI は、アプリケーションが使用できるイントラネットまたはインターネット上のリソースを簡潔に表す記述方式です。Uri クラスは、URI の解析、比較、結合などの URI 処理のためのプロパティとメソッドを定義します。Uri クラスのプロパティは読み取り専用です。変更可能なオブジェクトを作成するには、UriBuilder クラスを使用します。
"/new/index.htm" などの相対 URI は、ベース URI を基準にして展開し、絶対 URI に変換する必要があります。MakeRelative メソッドは、必要に応じて絶対 URI を相対 URI に変換するメソッドです。
エスケープ シーケンスが含まれるスキーム ID を含む正しい形式の URI 文字列の場合、Uri コンストラクタではこの文字列をエスケープできません。
Uri のプロパティは、標準データ形式をエスケープ エンコーディングで返します。このとき、127 より大きい Unicode 値の文字はすべて、それと等価の 16 進数値に置換されます。URI を正規形式で格納するため、Uri コンストラクタは次に示すステップを実行します。
-
URI スキームを小文字に変換します。
-
ホスト名を小文字に変換します。
-
ホスト名が IPv6 アドレスである場合、標準の IPv6 アドレスが使用されます。ScopeId とその他のオプションの IPv6 データは削除されます。
-
既定のポート番号と空のポート番号を削除します。
-
エスケープ表現や /./、/../、// などのシーケンスを圧縮することにより、階層構造の URI のパスを正規化します。
-
階層構造の URI で、ホストの末尾がスラッシュ (/) ではない場合、スラッシュが追加されます。
-
URI 内の予約文字は、RFC 2396 に準拠してエスケープされます。
ToString メソッドを使用して、Uri クラスの内容をエスケープ エンコード URI 参照から判読可能な URI 参照へ変換できます。一部の予約文字が、ToString メソッドの出力でもエスケープされることがあるので注意してください。これは、ToString の戻り値から URI を明確に再作成するためです。
一部の URI には、フラグメント識別子とクエリの一方または両方が含まれています。フラグメント識別子とは、URI 上でシャープ記号 (#) の後に続く任意のテキストです。シャープ記号自体は、フラグメント識別子に含まれません。フラグメント テキストは、Fragment プロパティに格納されています。クエリ情報とは、URI 上で疑問符 (?) の後に続く任意のテキストです。クエリ テキストは Query プロパティに格納されています。
.NET Framework Version 1.1 では、コンストラクタに指定した文字列に不明なスキームや "c:\" が含まれていると、Uri クラスによってコロン (:) の後ろに "//" が挿入されます。たとえば、URI xyz:c:\abc は、xyz://c:/abc に変換されます。.NET Framework Version 2.0 では、この動作が廃止されているので、前述の文字列は xyz:c:/abc に変換されます。
メモ |
|---|
| URI クラスでは、IPv4 プロトコルのピリオド区切りの 10 進表記、および IPv6 プロトコルのコロン区切りの 16 進表記の、両方の IP アドレス形式を使用できます。なお、IPv6 アドレスの場合は、http://[::1] のように、角かっこで囲んでください。 |
パフォーマンスに関する考慮事項
URI を格納した Web.config ファイルを使用してアプリケーションを初期化する場合、その URI のスキーム ID が標準のスキーム ID でないと、URI の処理に不要な時間がかかります。その場合、アプリケーションの中で影響を受ける部分を、アプリケーションの起動時ではなく、その URI が必要とされるときに初期化します。
呼び出し時の注意
セキュリティ上の理由から、アプリケーションでは、
dontEscape を
true に設定して信頼関係のないソースから
Uri インスタンスを受け入れる場合に、注意する必要があります。
IsWellFormedOriginalString メソッドを呼び出して、URI 文字列の有効性をチェックできます。
Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows CE プラットフォームメモ :
.NET Compact Framework では、相対パスと絶対パスが区別されません。また、.NET Compact Framework では、file:// 形式で始まる URL の処理方法が完全版の .NET Framework とは異なります。file://myfile と相対的に指定すると、\\myfile として解決されます。file:///myfile ( 3 つのスラッシュ) を使用すると、ルート ディレクトリにある \myfile として解決されます。正常な操作を確保するには、絶対パス情報を指定してください。