Если вы хотите разрешить запрос, вам нужно добавить requestPathInvalidCharacters
и задать для него пустую строку:
<system.web>
<httpRuntime requestPathInvalidCharacters="" />
</system.web>
Редактировать Вы должны оставить свой исходный вопрос на месте, потому что теперь мой ответ не имеет смысла.
Но в ответ на ваш второй вопрос, это потому, что% 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.