服务器。MapPath和空间
-
11-12-2019 - |
题
我注意到服务器中有一些奇怪的东西。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的任何文件夹。