[英]Server.MapPath and spaces
我注意到Server.MapPath()中有些奇怪。 如果我的文件夹末尾有空格,则会得到:
HttpException:无法映射路径。
可以正常运行: Server.MapPath("/Folder1/Folder2/item.jpg")
可以正常工作: Server.MapPath("/Folder1/ Folder2/item.jpg")
可以正常运行: Server.MapPath("/Folder1/Fol der2/item.jpg")
失败!: Server.MapPath("/Folder1/Folder2 /item.jpg")
有人可以向我解释为什么最后一个空格失败而其他地方没有空格吗?
注意:所有文件夹都不存在。
MapPath方法将指定的相对或虚拟路径映射到服务器上的相应物理目录。 该方法不检查它返回的路径是否有效或在服务器上是否存在。 您必须使用Directory.Exists()或File.Exists()方法来检查目录或文件是否已存在。
if (File.Exists(Server.MapPath(file))
此外,还知道以下是该方法的无效字符:
星号(*)
问号(?)
尖括号(<或>)
逗号(,)
冒号或分号(:或;)
单引号或双引号(“或”)
右方括号(])
双斜杠(//或\\)
希望能有所帮助。
因为你不应该 :
文件名或目录名不要以空格或句号结尾。 尽管基础文件系统可能支持此类名称,但Windows Shell和用户界面不支持。 但是,可以将句点指定为名称的第一个字符。 例如,“。temp”。
问题来自方法FileUtil.IsSuspiciousPhysicalPath(string physicalPath, out bool pathTooLong)
,该方法进行比较:
string.Compare(physicalPath, Path.GetFullPath(physicalPath), StringComparison.OrdinalIgnoreCase) != 0;
Path.GetFullPath()
会修剪目录和文件名中的尾随空格(因为它会这样调用Path.NormalizePath()
),可以通过为以下Path.GetFullPath(@"C:\\Foo \\Bar.txt")
调用Path.GetFullPath(@"C:\\Foo \\Bar.txt")
来发现它。例。 由于该路径与包含空格的原始路径不匹配,因此该方法将返回true
从而将该路径标识为可疑路径,然后Server.MapPath
将引发异常。
设置Visual Studio 2010进入Microsoft .NET源代码
使用问题后,我尝试找出使用方法server.MapPath
调试.net框架代码后在.net框架中实际上是什么,我发现从虚拟路径获取绝对路径的调用会抛出以下文件和框架方法
文件 -System \\ Web \\ httpserverutility.cs \\ 1477467 \\ httpserverutility.cs 方法 -MapPath
文件 -\\ System \\ Web \\ VirtualPath.cs \\ 1477467 \\ VirtualPath.cs * 方法 *-创建
文件 -System \\ Web \\ HttpRequest.cs \\ 1599819 \\ HttpRequest.cs 方法 -MapPath
但是我发现,通过strage行为,当路径为/ folder1 / folder2 /file.cs时,它返回我为null,但是当输入/ folder1 / folder2 / file.cs时,不是reutn null对象。
我希望您喜欢踩脚架,看看会发生什么
无论如何,好的问题..但仍然是微软的人给出这个问题的答案,他们只能在framewok中设计文件
问题是它无法找到带有空格的文件夹,即“ Folder2”。无效,并且无法在文件系统上找到该文件夹。
基本上,您在Windows文件系统上找不到以名称结尾(即开头或结尾)为空白的任何文件夹。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.