Ограничения URL в ASP.NET 4: почему URL не может содержать символы% 3f - PullRequest
8 голосов
/ 14 мая 2010
http://site.com/page%3fcharacter

Этот URL вернет следующую ошибку:

Illegal characters in path.

Я уже положил это в web.config:

<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
<pages validateRequest="false"> 
...

Как я могу исправить эту ошибку?

Ответы [ 3 ]

26 голосов
/ 14 мая 2010

Если вы хотите разрешить запрос, вам нужно добавить 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.

14 голосов
/ 09 июля 2010

Вот хорошая статья Хансельмана, объясняющая все закоулки, связанные с вашей проблемой:

Эксперименты с дураками: учет процентов, угловых скобок и других непослушных вещей в URL запроса ASP.NET/IIS

1 голос
/ 14 мая 2010

Возможно, потому что это выглядит как неправильный URL.

& используется в качестве разделителя для параметров строки запроса, т.е. site.com/page?some=20&another=15

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...