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 свойство .