Редактировать: Добавлен акцент на соответствующие разделы.
В основном: IIS чрезмерно параноидален. Вы можете безопасно отключить эту проверку, если вы ничего не делаете особенно неразумно с декодированными URI данными (например, генерируете локальные URI файловой системы с помощью конкатенации строк).
Чтобы отключить проверку, сделайте следующее (из здесь ): (см. Мой комментарий ниже, что влечет за собой двойное экранирование).
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
</system.webServer>
Если символ плюса является допустимым символом во входных данных поиска, вам понадобится , чтобы включить «allowDoubleEscaping», чтобы IIS мог обрабатывать такой ввод из пути URI.
Наконец, очень простой, но ограниченный обходной путь - просто избежать «+» и использовать вместо него «% 20». В любом случае, использование символа '+' для кодирования пробела является , а не допустимой кодировкой URL , но специфично для ограниченного набора протоколов и, вероятно, широко поддерживается по причинам обратной совместимости. Если только для целей канонизации, вам все равно лучше кодировать пробелы как «% 20»; и это прекрасно обходит проблему IIS7 (которая все еще может возникать для других последовательностей, таких как% 25ab.)