Назад | Перейти на главную страницу

Как настроить IIS 7.5, чтобы разрешить специальные символы в URL-адресе для ASP.NET 3.5?

Я пытаюсь настроить свой IIS 7.5, чтобы разрешить специальные символы в URL-адресе для ASP.NET. Это важно для поддержки широко распространенных устаревших URL-адресов в новой системе.

Пример URL: http://mydomain.com/FileWith%inTheName.html Это будет закодировано в URL-адресе и запрошено как http://mydomain.com/FileWith25%inTheName.html

Это просто работает, когда создается новый веб-сайт в IIS 7.5, помещается файл со знаком процента в имени файла в корневой каталог веб-сайта и указывается на него браузером.

Это делает не работают, однако, когда веб-сайт является приложением ASP.NET. ASP.NET всегда возвращает 400.0 - Bad Request ошибка в WindowsAuthentication модуль из StaticFile обработчик, указывая на этот URL. Однако он правильно отображает запрошенный URL-адрес, а также правильно разрешает правильный физический файл (информация из поля «Физический путь» на странице ошибок сервера указывает на физически доступный файл).

Есть подсказки, как включить это, поэтому я шаг за шагом следовал инструкциям на этих сайтах:

Второй фактически суммирует информацию из первого сообщения и добавляет дополнительную информацию о системах x64 (мы используем x64) и о дополнительном изменении web.config для этого. Я пробовал все это, и все еще не могу запустить это из веб-приложения asp.net. И да: я перезагрузился после внесения изменений в реестр.

Итак, что мне нужно сделать в дополнение к настройкам, описанным в сообщениях выше, для поддержки устаревших URL-адресов, содержащих процентные символы?

Дополнительная информация: интегрирован режим пула приложений.

От себя через несколько дней. Никто не знает?

Со мной случилось то, что после внесения всех изменений в реестр Windows я застрял, как и вы. Проблема была устранена после того, как я изменил режим пула приложений на классический.

Символы амперсанда, если они не находятся между "/" и "/" и перед "?" символы - это логические операторы для URI и URL-адресов, вплоть до RFC, в которых они определены. Вам придется потрудиться, чтобы использовать что-то вроде:

/request/to/path/?queryvar=value#nextval=value#next=val

и нет:

/request/to/path/?queryvar=value&nextval=value

Значения url_encoded и необработанное представление ascii работают довольно хорошо, например RHO, который действует как фильтр шлюза ASP.NET. Обычно, когда я кодирую ASP.NET, я почти никогда не пользуюсь IIS, если это не основной модуль конфигурации или плагин. ASP.NET поддерживает полное покрытие состояний в API.

Почти все языки с веб-API естественным образом поддерживают перевод символов в кодировке URL. Написание небольшого класса, который обрабатывает запросы шлюза и анализирует строку запроса, - более простой способ работы со специальными символами, чем игра с IIS в реестре.

Помните об ограничении символов высокого уровня, которое может вызвать переполнение буфера. Убедитесь, что в высокобитовых символах и определенных повторяющихся символах не допускаются исключения переполнения. Вы можете ввести букву после U + 1000, но она вам действительно нужна только для U + 0097 или ее кратного числа для многоуровневого запроса.