繁体   English   中英

Server.MapPath和空格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM