Как уже указывал Мэтью, это разрешается в .NET 4.0, но не в .NET 2.0. Проблема заключается в базовой системе: Microsoft запрещает имена заканчиваться точкой (или пробелом), потому что Windows Explorer не может их обработать (однако базовая система NTFS может обрабатывать их).
В чем причина
Внутренне, и это верно для .NET 2.0 и .NET 4.0, веб-запрос в какой-то момент передается методу IsSuspiciousPhysicalPath
. Помимо прочего, этот метод вызывает стандартный API для создания «официального» пути на основе указанного пути. Это не создает этот путь. Затем он сравнивает этот правильный путь с данным путем. Если они отличаются (т. Е. Если данный путь не существует в исправленном пути), это считается подозрительным.
Вы можете попробовать это сами: используйте File.CreateFile, чтобы создать файл "test.txt ....". Это будет успешно, но в результате файл "test.txt". В приведенном выше сценарии указанный файл "text.txt ...." не соответствует созданному файлу, поэтому он является подозрительным и даже не достигает обработчика веб-запросов.
Даже обработчик 404 в базовых настройках IIS здесь не будет работать!
надуманный обходной путь
Обходной путь, который я использовал годами во многих установках (по причинам, не связанным с этой проблемой): установите Apache перед IIS и настройте его для прокси. Его относительно легко настроить (он потерян примеров в Интернете), и он может служить буфером для обработки такого рода «незаконных запросов», переписывая их в нечто, что IIS может обрабатывать.
Но, вероятно, проще перейти с .NET 2.0 на .NET 4.0