Я пытаюсь настроить свой 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 или ее кратного числа для многоуровневого запроса.