我注意到服务器中有一些奇怪的东西。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")

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

注: 没有文件夹存在。

有帮助吗?

解决方案

因为你 不应该:

不要以空格或句点结束文件或目录名。虽然底层文件系统可能支持此类名称,但Windows shell和用户界面不支持。但是,可以将句点指定为名称的第一个字符。例如,"。温度"。

问题来自方法 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") 例如。由于它与包含空格的原始路径不匹配,因此该方法将返回 true 从而将路径识别为可疑,之后 Server.MapPath 会抛出异常。

其他提示

mappath方法将指定的相对或虚拟路径映射到服务器上的相应物理目录。该方法不检查其返回的路径是否有效或存在于服务器上。您必须使用Directory.exists()或file.exists()方法来检查目录或文件是否已存在。

if (File.Exists(Server.MapPath(file)) 
. 此外,还知道以下方法是invlid字符:

星号(*)
问号(?)

角括号(<或>)
逗号(,)
结肠或半冒号(:或;) 单引用或双报('或“)
右边括号(])
双重斜线(//或\)

希望有帮助。

编辑

设置Visual Studio 2010进入Microsoft .NET源代码

使用帖子我试图找出在调试.NET FRAMWORK代码后使用方法Flashodicetagcode时发现在.NET FRAMODICETagcode中实际录制。我发现呼叫从虚拟路径抛出以下文件和框架方法

文件 - System \ Web \ httpserverututions.cs \ 1477467 \ httpserverutility.cs 方法 -mappath

文件 - \ System \ Web \ VirtualPath.CS \ 1477467 \ VirtualPath.cs * 方法 * - Create

文件 -system \ web \ httproest.cs \ 1599819 \ httproest.cs 方法 -mappath

但是我发现,当路径为/ folder1 / folder2 /file.cs但未在输入/ folder1 / folder2 / file.cs 时返回ME NULL时,其返回ME NULL

我希望你喜欢踏上框架,看看happnen

任何方式良好的问题..但是,微软只有在Framewok中设计该文件的Microsoft人员可能会给这个问题给出这个问题的andwser


问题是它无法找到包含空间的文件夹i.e“folder2”.not有效,无法在文件系统上找到此文件夹。

基本上,您在末尾或开头时,您不会在Windows文件系统上找到具有SAPCE的任何文件夹。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top