Поделиться через


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 имеет значение NULL, Uri если не удалось проанализировать объект из клиента.

Свойство UnescapeRequestUrl указывает, использует ли HttpListener необработанный неэкранированный URI вместо преобразованного URI, в котором преобразуются значения в процентах и выполняются другие шаги нормализации.

HttpListener Когда экземпляр получает запрос через http.sys службу, он создает экземпляр строки URI, предоставленной http.sys, и предоставляет его в качестве HttpListenerRequest.Url свойства .

Служба http.sys предоставляет две строки URI запроса:

  • Необработанный URI

  • Преобразованный URI

Необработанный универсальный System.Uri код ресурса (URI) — это указанный в строке запроса HTTP-запроса:

GET /path/

Host: www.contoso.com

Необработанный универсальный код ресурса (URI), предоставленный http.sys для упомянутого выше запроса, — "/path/". Представляет строку, следующую за HTTP-командой, когда она была отправлена по сети.

Служба http.sys создает преобразованный URI на основе сведений, предоставленных в запросе, используя URI, указанный в строке HTTP-запроса, и заголовке Узла для определения исходного сервера, на который должен быть переадресован запрос. Для этого сравнивается информация из запроса с набором зарегистрированных префиксов URI. Чтобы иметь возможность сравнивать эти значения, необходимо выполнить некоторую нормализацию запроса. Для примера выше преобразованный универсальный код ресурса (URI) будет следующим:

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

Служба http.sys объединяет Uri.Host значение свойства и строку в строке запроса для создания преобразованного URI. Кроме того, http.sys класс System.Uri также выполняет следующие действия:

  • Отменяет экранирование всех значений в процентах.

  • Преобразует символы в процентах, отличные от ASCII, в представление символов UTF-16. Обратите внимание, что поддерживаются символы UTF-8 и ANSI/DBCS, а также символы Юникода (кодировка Юникода в формате %uXXXX).

  • Выполняет другие шаги нормализации, например сжатие пути.

Так как запрос не содержит сведений о кодировке, используемой для значений в процентах, определить правильную кодировку только путем анализа значений в процентах может быть невозможно.

Поэтому http.sys предоставляет два раздела реестра для изменения процесса:

Ключ реестра Значение по умолчанию Описание
EnableNonUTF8 1 Если значение равно нулю, http.sys принимает только URL-адреса в кодировке UTF-8.

Если значение не равно нулю, http.sys также принимает URL-адреса в кодировке ANSI или DBCS в запросах.
FavorUTF8 1 Если значение не равно нулю, http.sys всегда сначала пытается декодировать URL-адрес как UTF-8. Если преобразование завершается сбоем и enableNonUTF8 не равно нулю, Http.sys затем пытается декодировать его как ANSI или DBCS.

Если значение равно нулю (а EnableNonUTF8 не равно нулю), http.sys пытается декодировать его как ANSI или DBCS; если это не удалось, выполняется преобразование UTF-8.

При HttpListener получении запроса он использует преобразованный универсальный код ресурса (URI) из в http.sys качестве входных данных в 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 свойство .

Применяется к

См. также раздел