http://site.com/page%3fcharacter
Этот URL возвратит следующую ошибку:
Illegal characters in path.
Я уже помещаюсь это в web.config:
<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
<pages validateRequest="false">
...
Как я могу зафиксировать эту ошибку?
Если вы хотите разрешить прохождение запроса, вам нужно добавить requestPathInvalidCharacters
и установить для него пустую строку:
<system.web>
<httpRuntime requestPathInvalidCharacters="" />
</system.web>
Edit Вы должны оставить исходный вопрос на месте, потому что теперь мой ответ не имеет смысла.
Но отвечая на ваш второй вопрос, это потому, что% 3f соответствует '?' что недопустимо в именах файлов в Windows. Вы можете установить для свойства relaxedUrlToFileSystemMapping
значение true
, чтобы изменить это поведение:
<system.web>
<httpRuntime requestPathInvalidCharacters=""
relaxedUrlToFileSystemMapping="true" />
</system.web>
Вы можете просмотреть все свойства в классе HttpRuntimeSection , чтобы увидеть если есть другие, которые могут быть применимы.
Вы также можете реализовать подкласс RequestValidator и настроить свой web.config для использования вашего подкласса (который предположительно разрешит прохождение всех URL-адресов?). Лично я бы не стал беспокоиться и просто позволил бы встроенным классам справиться с этим. Маловероятно, что обычный пользователь будет каждый раз случайно набирать "% 3f" в пути, и зачем беспокоиться о таких проблемах, чтобы улучшить сценарий использования для злонамеренных пользователей?
Это, кстати, на самом деле это новая функция в ASP.NET 4, поэтому Stack Overflow не выдаёт ошибку: он работает на .NET 3.5.
Вероятно, потому что это очень похоже на неправильный URL.
& используется в качестве разделителя для параметров строки запроса, например site.com/page?some=20&another=15
Вот хорошая статья Хансельмана, объясняющая все укромные уголки, связанные с вашей проблемой: