2009-06-12 31 views
39

En nuestra aplicación ASP.NET MVC, nos hemos dado cuenta de que no podemos tener lo prohibido nombres de archivo de DOS — COM1 través COM9, LPT1 través LPT9, CON, AUX, PRN, y NUL — en cualquier parte de nuestras rutas. Inevitablemente, IIS nos dice que no se puede encontrar el archivo, incluso cuando configuramos el enrutamiento para no verificar primero la existencia de archivos. ¿Cómo podemos solucionar esto?ASP.NET MVC enrutamiento vs Reservados nombres de archivo en Windows

+11

Para divertirse, pulse http://stackoverflow.com/com1 y compare con http://stackoverflow.com/ThisDoesNotExist – kamens

+0

curiosamente, stackoverflow.com/clock$ funciona bien, aunque CLOCK $ es un nombre de archivo de dispositivo reservado como bien. –

+12

Y aprovechando este conocimiento, ahora he logrado que sea imposible navegar a mi página de usuario. Woot. –

Respuesta

35

Esto se ha abordado en ASP.NET 4. http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

se puede aplicar una configuración en web.config que relaja esta restricción.

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

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

Espero que ayude.

+0

Gracias Phil! Me pregunto por qué no es el valor predeterminado en .net 4. – bkaid

+0

@thekaid: compatibilidad con versiones anteriores: MS no puede estar seguro de que nadie depende del comportamiento anterior. – Richard

+1

@thekaido Lo que Richard dijo es exactamente correcto. Te sorprenderían los tipos de errores en los que las personas comienzan a confiar. – Haacked

18

Desde que hice la pregunta, descubrí que el error está en ASP.NET propiamente dicho, no en IIS o ASP.NET MVC, lo que significa que no hay forma de evitarlo. La única solución es prohibir manualmente las URL que coincidan con estos nombres y estos nombres, seguidos de un punto y caracteres aleatorios.

+3

Sí. :) El equipo de ASP.NET es consciente de este error y lo está buscando para ASP.NET 4. No se puede garantizar si se solucionará, pero al menos hay interés en mejorarlo para los desarrolladores. – Levi