Server.MapPath和空格

MrS*_*ess 5 .net c# asp.net server.mappath

我在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")

有人可以向我解释为什么最后的空间会失败,而其他地方的空间却没有?

注意:没有文件夹存在.

Cod*_*ter 2

因为你不应该

文件名或目录名请勿以空格或句点结尾。尽管底层文件系统可能支持此类名称,但 Windows shell 和用户界面不支持。但是,可以将句点指定为名称的第一个字符。例如,“.temp”。

问题来自于方法FileUtil.IsSuspiciousPhysicalPath(string physicalPath, out bool pathTooLong),该方法进行了比较:

string.Compare(physicalPath, Path.GetFullPath(physicalPath), StringComparison.OrdinalIgnoreCase) != 0;
Run Code Online (Sandbox Code Playgroud)

Path.GetFullPath()将从目录和文件名中删除尾随空格(因为它调用了Path.NormalizePath()which这样做),Path.GetFullPath(@"C:\Foo \Bar.txt")例如可以发现调用。由于这与包含空格的原始路径不匹配,true因此该方法将返回,从而将该路径识别为可疑,然后Server.MapPath抛出异常。