Маршрутизация ASP.NET MVC и зарезервированные имена файлов в Windows

В нашем приложении ASP.NET MVC мы заметили, что у нас не может быть Запрещенных имен файлов DOS сCOM1 по COM9, с LPT1 по LPT9, CON, AUX, PRN и NUL где-либо на наших маршрутах. Они неизбежно приводят к тому, что IIS сообщает нам, что файл не может быть найден, даже если мы настроили маршрутизацию, чтобы сначала не проверять наличие файлов. Как мы можем это обойти?


person Benjamin Pollack    schedule 12.06.2009    source источник
comment
Для удовольствия нажмите stackoverflow.com/com1 и сравните с http://stackoverflow.com/ThisDoesNotExist   -  person kamens    schedule 12.06.2009
comment
интересно, stackoverflow.com/clock$ работает нормально, хотя CLOCK $ также является зарезервированным именем файла устройства.   -  person Jacob Krall    schedule 12.06.2009
comment
Используя эти знания, я успешно сделал невозможным переход на свою пользовательскую страницу. Woot.   -  person Benjamin Pollack    schedule 12.06.2009
comment
Мне нравится, как вы себя поставили.   -  person Michael Pryor    schedule 13.06.2009
comment
Очень круто; но не невозможно - имя пользователя не требуется в маршруте информации о пользователе;)   -  person Tom Ritter    schedule 13.06.2009
comment
microsoft.com/com1.aspx))   -  person Sergey Mirvoda    schedule 30.04.2010
comment
Мне было интересно, почему, когда кто-то добавил на мой сайт тег для con (сокращенно от условного, как в comic-con), я не мог перейти к тегам / con. +1 к этому Q и A.   -  person WildJoe    schedule 11.05.2010
comment
Снова занялся этой проблемой ... но обнаружил, что stackoverflow.com/questions/987105/ было правильным решением. Думаете, что принятый ответ можно изменить / обновить?   -  person John Nelson    schedule 09.11.2010


Ответы (4)


Это было решено в ASP.NET 4. http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

Вы можете применить параметр в web.config, который снимает это ограничение.

<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>

    <!-- ... your other settings ... -->
  </system.web>
</configuration>

Надеюсь, это поможет.

person Haacked    schedule 30.04.2010
comment
@thekaid: Обратная совместимость: MS не может быть уверена, что никто не зависит от старого поведения. - person Richard; 04.05.2010
comment
@thekaido То, что сказал Ричард, совершенно верно. Вы будете удивлены, узнав, на какие типы ошибок люди начинают полагаться. - person Haacked; 10.05.2010

Задав вопрос, я обнаружил, что ошибка связана с собственно ASP.NET, а не с IIS или ASP.NET MVC, а это означает, что ее невозможно обойти. Единственное решение - вручную запретить URL-адреса, соответствующие этим именам и этим именам, за которыми следует точка и случайные символы.

person Benjamin Pollack    schedule 12.06.2009
comment
Ага. :) Команда ASP.NET знает об этой ошибке и изучает ее для ASP.NET 4. Не могу гарантировать, что она будет исправлена, но, по крайней мере, есть заинтересованность в том, чтобы улучшить ее для разработчиков. - person Levi; 13.06.2009

По той же причине в StackOverflow не может быть тега web.config.

http://stackoverflow.uservoice.com/pages/1722-general/suggestions/98871-web-config-tag-404-error

person CoderDennis    schedule 12.06.2009

по другой аналогичной причине у вас не может быть URL-адресов с точкой и косой чертой Семантические URL-адреса с точками в .net

person Jokin    schedule 07.07.2009