Pregunta

Me di cuenta de algo raro en el Servidor.MapPath().Si tengo una carpeta con un espacio al final tengo:

HttpException:No pudo mapa de la ruta.

Esto funciona bien:Server.MapPath("/Folder1/Folder2/item.jpg")

Esto funciona bien:Server.MapPath("/Folder1/ Folder2/item.jpg")

Esto funciona bien:Server.MapPath("/Folder1/Fol der2/item.jpg")

Esta falla!:Server.MapPath("/Folder1/Folder2 /item.jpg")

Podría alguien explicarme por qué un espacio al final se produce un error mientras un espacio en cualquier otro lugar no?

Nota: Ninguna de las carpetas existentes.

¿Fue útil?

Solución

Porque no:

No el final de un nombre de archivo o directorio con un espacio o un punto.Aunque el sistema de archivos subyacente de mayo de apoyo tales nombres, el shell de Windows y la interfaz de usuario no.Sin embargo, es aceptable para especificar un período como el primer carácter de un nombre.Por ejemplo, ".temp".

El problema viene de que el método FileUtil.IsSuspiciousPhysicalPath(string physicalPath, out bool pathTooLong), que hace una comparación:

string.Compare(physicalPath, Path.GetFullPath(physicalPath), StringComparison.OrdinalIgnoreCase) != 0;

Path.GetFullPath() va a recortar espacios de nombres de archivos y directorios (porque llama Path.NormalizePath() que lo hace), los cuales pueden ser descubiertos de llamadas Path.GetFullPath(@"C:\Foo \Bar.txt") por ejemplo.Ya que no coincide con la ruta original que contiene los espacios, el método devolverá true por lo tanto la identificación de la ruta como sospechoso, después de que Server.MapPath producirá la excepción.

Otros consejos

El método Mappath mapea la ruta relativa o virtual especificada al directorio físico correspondiente en el servidor.El método no comprueba si la ruta que devuelve es válida o existe en el servidor.Debe usar el método de Directory.Exists () o File.exists () para verificar si ya existe directorio o archivo.

if (File.Exists(Server.MapPath(file)) 

Además, también se sabe los siguientes son caracteres INVLID para el método:

asterisco (*)
Signo de interrogación (?)
Soportes de ángulo ()
Coma (,)
Colon o semi-colon (: o;)
Cita única o cita doble ('o ")
Soporte cuadrado derecho (])
Tashes doble (// o \)

espero que ayude.

Editar

Configuración de Visual Studio 2010 para entrar en el código fuente de Microsoft .NET

El uso de la publicación. Intenté saber qué es en realidad en .NET Framework cuando usamos el método server.MapPath después de depurar el código .NET FRAMWORK. Descubrí llamadas para obtener una ruta absoluta de la ruta virtual que van los siguientes archivos y métodos de marco.

Archivo - Sistema \ Web \ httpserverutility.cs \ 1477467 \ httpserverutility.cs método -mappath

Archivo - \ System \ Web \ VirtualPath.CS \ 1477467 \ virtualpath.cs * MÉTODO * - Crear

Archivo -system \ web \ httpequest.cs \ 1599819 \ httpritest.cs método -mappath

Pero descubrí que con el comportamiento de las placas que me está devolviendo null cuando la ruta es / folder1 / folder2 /file.cs pero no reutn null objeto cuando ingrese / folder1 / folder2 / file.cs

Espero que le guste aumentar las crepúsculas y ver qué pasa

CUALQUIER MANERA DE CUALQUIER MANERA DE CUALQUIER MANERA DE CUALQUIER MANERA DE CUALQUIER MANERA DE CUALQUIER ANWSER A ESTA PERSONA DE MICROSOFT SOLO LOS MICROSOFT LOS ARTÍCULOS DE LOS ARCHIVOS EN Framewok


El problema es que no puede localizar la carpeta con el espacio I.E "Folder2" .NOT válido y no puede localizar esta carpeta en el sistema de archivos.

Básicamente, no encuentra ninguna carpeta en el sistema de archivos de Windows que tiene SAPCE después de NameI.e al final o para comenzar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top