Share via


HttpListenerRequest.Url プロパティ

定義

クライアントによって要求された Uri オブジェクトを取得します。

public:
 property Uri ^ Url { Uri ^ get(); };
public Uri? Url { get; }
public Uri Url { get; }
member this.Url : Uri
Public ReadOnly Property Url As Uri

プロパティ値

Uri

クライアントによって要求されたリソースを識別する Uri オブジェクト。

次のコード例では、 プロパティの使用方法を Url 示します。

public static void ShowRequestProperties1 (HttpListenerRequest request)
{
    // Display the MIME types that can be used in the response.
    string[] types = request.AcceptTypes;
    if (types != null)
    {
        Console.WriteLine("Acceptable MIME types:");
        foreach (string s in types)
        {
            Console.WriteLine(s);
        }
    }
    // Display the language preferences for the response.
    types = request.UserLanguages;
    if (types != null)
    {
        Console.WriteLine("Acceptable natural languages:");
        foreach (string l in types)
        {
            Console.WriteLine(l);
        }
    }

    // Display the URL used by the client.
    Console.WriteLine("URL: {0}", request.Url.OriginalString);
    Console.WriteLine("Raw URL: {0}", request.RawUrl);
    Console.WriteLine("Query: {0}", request.QueryString);

    // Display the referring URI.
    Console.WriteLine("Referred by: {0}", request.UrlReferrer);

    //Display the HTTP method.
    Console.WriteLine("HTTP Method: {0}", request.HttpMethod);
    //Display the host information specified by the client;
    Console.WriteLine("Host name: {0}", request.UserHostName);
    Console.WriteLine("Host address: {0}", request.UserHostAddress);
    Console.WriteLine("User agent: {0}", request.UserAgent);
}
Public Shared Sub ShowRequestProperties1(ByVal request As HttpListenerRequest)
    ' Display the MIME types that can be used in the response.
    Dim types As String() = request.AcceptTypes

    If types IsNot Nothing Then
        Console.WriteLine("Acceptable MIME types:")

        For Each s As String In types
            Console.WriteLine(s)
        Next
    End If

    ' Display the language preferences for the response.
    types = request.UserLanguages

    If types IsNot Nothing Then
        Console.WriteLine("Acceptable natural languages:")

        For Each l As String In types
            Console.WriteLine(l)
        Next
    End If

    ' Display the URL used by the client.
    Console.WriteLine("URL: {0}", request.Url.OriginalString)
    Console.WriteLine("Raw URL: {0}", request.RawUrl)
    Console.WriteLine("Query: {0}", request.QueryString)

    ' Display the referring URI.
    Console.WriteLine("Referred by: {0}", request.UrlReferrer)

    ' Display the HTTP method.
    Console.WriteLine("HTTP Method: {0}", request.HttpMethod)

    ' Display the host information specified by the client.
    Console.WriteLine("Host name: {0}", request.UserHostName)
    Console.WriteLine("Host address: {0}", request.UserHostAddress)
    Console.WriteLine("User agent: {0}", request.UserAgent)
End Sub

注釈

Urlプロパティを使用すると、オブジェクトから使用可能なすべての情報をUri取得できます。 URI 要求の生テキストのみを知る必要がある場合は、代わりに プロパティを RawUrl 使用することを検討してください。

Urlクライアントからの を解析できなかった場合、Uriプロパティは null です。

プロパティは 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 と Host ヘッダーを使用して、要求で提供される情報から変換された URI を作成して、要求の転送先の配信元サーバーを決定します。 これは、要求の情報を一連の登録済み 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 入力として使用します。

適用対象

こちらもご覧ください