w naszej aplikacji ASP.NET MVC, zauważyliśmy, że nie możemy mieć zakazanego DOS nazwy plików — COM1
poprzez COM9
, LPT1
przez LPT9
, CON
, AUX
, PRN
, i NUL
— w dowolnym miejscu na naszych trasach. Nieuchronnie skutkują tym, że IIS powie nam, że pliku nie można znaleźć, nawet jeśli ustaliliśmy routing, aby nie sprawdzać najpierw istnienia plików. Jak możemy obejść to?ASP.NET MVC Routing vs. zastrzeżone nazwy plików w systemie Windows
Odpowiedz
Zostało to uwzględnione w ASP.NET 4. http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx
można zastosować ustawienie w web.config, które rozluźnia to ograniczenie.
<configuration>
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<!-- ... your other settings ... -->
</system.web>
</configuration>
Nadzieję, że pomaga.
Dzięki Phil! Zastanawiam się, dlaczego nie jest to domyślne w .net 4. – bkaid
@thekaid: kompatybilność wsteczna: MS nie może być pewne, że nikt nie zależy od starego zachowania. – Richard
@thekaido To, co Richard powiedział, jest dokładnie słuszne. Byłbyś zaskoczony typami błędów, na których ludzie zaczynają polegać. – Haacked
Od zadawania pytania, stwierdziłem, że błąd jest w ASP.NET właściwe, a nie IIS lub ASP.NET MVC, co oznacza, że nie ma sposobu obejścia go. Jedynym rozwiązaniem jest ręczne blokowanie adresów URL pasujących do tych nazw i nazw, po których następuje kropka i losowe znaki.
Yup. :) Zespół ASP.NET zdaje sobie sprawę z tego błędu i szuka go w ASP.NET 4. Nie można zagwarantować, że zostanie on naprawiony, ale przynajmniej istnieje zainteresowanie tym, aby było to lepsze dla programistów. – Levi
Z podobnego powodu w StackOverflow nie może być znacznika web.config
.
http://stackoverflow.uservoice.com/pages/1722-general/suggestions/98871-web-config-tag-404-error
innego podobnego powodu nie można mieć adresy URL z kropką i kreską Semantic urls with dots in .net
Dla zabawy, naciśnij http://stackoverflow.com/com1 i porównaj z http://stackoverflow.com/ThisDoesNotExist – kamens
co ciekawe, stackoverflow.com/clock$ działa dobrze, nawet jeśli CLOCK $ jest zastrzeżoną nazwą urządzenia jako dobrze. –
Wykorzystując tę wiedzę, udało mi się z powodzeniem uniemożliwić nawigację do mojej strony użytkownika. Woot. –