次の方法で共有


HttpListenerElement.UnescapeRequestUrl プロパティ

定義

HttpListener が変換された URI ではなくエスケープされていない生の URI を使用するかどうかを示す値を取得します。

public:
 property bool UnescapeRequestUrl { bool get(); };
[System.Configuration.ConfigurationProperty("unescapeRequestUrl", DefaultValue=true, IsRequired=false)]
public bool UnescapeRequestUrl { get; }
[<System.Configuration.ConfigurationProperty("unescapeRequestUrl", DefaultValue=true, IsRequired=false)>]
member this.UnescapeRequestUrl : bool
Public ReadOnly Property UnescapeRequestUrl As Boolean

プロパティ値

HttpListener が変換された URI ではなくエスケープされていない生の URI を使用するかどうかを示すブール値。

属性

注釈

プロパティは UnescapeRequestUrl 、パーセントでエンコードされた値が変換され、その他の正規化手順が実行される変換された URI ではなく、未加工のエスケープされていない URI を使用するかどうかを HttpListener 示します。

HttpListener インスタンスでは、http.sys サービスを介して要求を受け取ると、http.sys によって提供される URI 文字列のインスタンスを作成し、HttpListenerRequest.Url プロパティとして公開します。

http.sys サービスでは、次の 2 つの要求 URI 文字列を公開します。

  • 生の URI

  • 変換された URI

生の URI は、HTTP 要求の要求ラインで指定される System.Uri です。

GET /path/

Host: www.contoso.com

前述の要求に対して http.sys によって提供される生の URI は、"/path/" です。 これは、ネットワーク経由で送信されたため、HTTP 動詞に続く文字列を表します。

http.sys サービスでは、HTTP 要求ラインに指定された URI とホスト ヘッダーを使用して、要求で提供される情報から変換された URI を作成し、要求の転送先となる配信元サーバーを決定します。 これは、要求の情報を一連の登録済み URI プレフィックスと比較することによって行われます。 HTTP Server SDK のドキュメントでは、この変換された URI を HTTP_COOKED_URL 構造として参照しています。

要求を登録済み URI プレフィックスと比較できるようにするには、要求の正規化を行う必要があります。 上の例の場合、変換された URI は次のようになります。

http://www.contoso.com/path/

http.sys サービスでは、Uri.Host プロパティ値と要求ラインの文字列を結合して、変換された URI を作成します。 さらに、 http.sys クラスも System.Uri 次の操作を行います。

  • パーセント エンコードされたすべての値をエスケープ解除します。

  • パーセント エンコードされた非 ASCII 文字を UTF-16 文字表現に変換します。 UTF-8 文字と ANSI/DBCS 文字は、Unicode 文字 (%uXXXX 形式を使用した Unicode エンコード) 同様にサポートされていることに注意してください。

  • パスの圧縮など、その他の正規化手順を実行します。

パーセント エンコードされた値に使用されるエンコードに関する情報が要求に含まれていないため、パーセント エンコードされた値を解析するだけでは、正しいエンコードを判断できない場合があります。

このため、http.sys では、プロセスを変更するために次の 2 つのレジストリ キーを使用します。

レジストリ キー 既定値 説明
EnableNonUTF8 1 0 の場合、http.sys は UTF-8 でエンコードされた URL のみを受け入れます。

0 以外の場合、http.sys は要求の中で ANSI または DBCS でエンコードされた URL も受け入れます。
FavorUTF8 1 0 以外の場合、http.sys では常に URL を UTF-8 としてデコードしようとします。変換に失敗し、EnableNonUTF8 が 0 以外の場合は、ANSI または DBCS としてデコードしようとします。

0 (および EnableNonUTF8 が 0 以外) の場合、http.sys では ANSI または DBCS としてデコードしようとします。成功しなかった場合は、UTF-8 変換を試行します。

HttpListener では、要求を受信すると、http.sys から変換された URI を Url プロパティへの入力として使用します。

URI の文字と数字以外の文字をサポートする必要があります。 例として、次の URI があります。これは、顧客番号 "1/3812" の顧客情報を取得するために使用されます。

http://www.contoso.com/Customer('1%2F3812')/

URI のパーセント エンコードされたスラッシュ (%2F) に注意してください。 この場合、スラッシュ文字はパス区切り記号ではなくデータを表すため、これは必要です。

文字列を URI コンストラクターに渡すと、次の URI になります。

http://www.contoso.com/Customer('1/3812')/

パスをセグメントに分割すると、次の要素が生成されます。

Customer('1

3812')

これは、要求の送信者の意図ではありません。

プロパティが UnescapeRequestUrl false に設定されている場合、 は要求を HttpListener 受け取るときに、変換された URI の代わりに生 URI を http.sys プロパティへの Url 入力として使用します。

適用対象

こちらもご覧ください