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


HttpListenerElement.UnescapeRequestUrl Свойство

Определение

Получает значение, определяющее, использует ли HttpListener не преобразованный в escape-последовательность 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 не преобразованный в escape-последовательность URI вместо преобразованного.

Атрибуты

Комментарии

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

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

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

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

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

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

GET /path/

Host: www.contoso.com

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

Служба http.sys создает преобразованный URI на основе сведений, предоставленных в запросе, используя URI, указанный в строке HTTP-запроса, и заголовок узла, чтобы определить сервер-источник, на который должен быть переадресован запрос. Это делается путем сравнения сведений из запроса с набором зарегистрированных префиксов URI. В документации по пакету SDK для HTTP-сервера этот преобразованный 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, а также символы Юникода (кодировка Юникода в формате %uXXXXX).

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

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

Таким образом 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 свойство .

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

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