2009-06-12 3 views
39

Nella nostra applicazione ASP.NET MVC, abbiamo notato che non possiamo avere il proibito DOS nomi di file — COM1 attraverso COM9, LPT1 attraverso LPT9, CON, AUX, PRN, e NUL — ovunque nei nostri percorsi. Risultano inevitabilmente in IIS che ci dice che il file non può essere trovato, anche quando impostiamo il routing per non controllare prima l'esistenza dei file. Come possiamo aggirare questo?ASP.NET MVC routing vs riservati I nomi dei file in Windows

+11

Per divertimento, premere http://stackoverflow.com/com1 e confrontare http://stackoverflow.com/ThisDoesNotExist – kamens

+0

in modo interessante, stackoverflow.com/clock$ funziona correttamente, anche se CLOCK $ è un nome file di dispositivo riservato come bene. –

+12

E sfruttando questa conoscenza, ora ho reso impossibile l'accesso alla mia pagina utente. Woot. –

risposta

35

Questo è stato risolto in ASP.NET 4. http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

è possibile applicare una impostazione in web.config che rilassa questa restrizione.

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

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

Spero che questo aiuti.

+0

Grazie Phil! Mi chiedo perché non sia il default in .net 4. – bkaid

+0

@thekaid: retrocompatibilità: MS non può essere certo che nessuno dipende dal vecchio comportamento. – Richard

+1

@thekaido Ciò che Richard ha detto è esattamente giusto. Saresti sorpreso dei tipi di bug che le persone iniziano a fare affidamento. – Haacked

18

Dopo aver posto la domanda, ho scoperto che il bug si trova in ASP.NET, non in IIS o ASP.NET MVC, il che significa che non c'è modo di aggirare il problema. L'unica soluzione è vietare manualmente gli URL che corrispondono a questi nomi e questi nomi seguiti da un punto e caratteri casuali.

+3

Sì. :) Il team ASP.NET è a conoscenza di questo bug e sta cercando in esso per ASP.NET 4. Non può garantire se verrà risolto, ma almeno c'è interesse a renderlo migliore per gli sviluppatori. – Levi