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, который определяет ресурс, запрошенный клиентом.
Примеры
В следующем примере кода демонстрируется 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 свойство .