经典ASP Server.MapPath()在global.asa中无法正常工作

时间:2009-01-30 18:04:37

标签: asp-classic server.mappath global.asa mappath

在Classic ASP中, Server.MapPath() global.asa 中的 Application_OnStart 事件中并不总是正常工作。我在虚拟根目录中的“\ testfolder \ test.asp”上有一个ASP页面,我在“\ xsl \ transform.xsl”上有一个XSLT文件。我的虚拟根目录位于“c:\ inetpub \ wwwroot \ testapp \”

我在ASP页面中使用 MapPath 来获取XSLT文件的完整路径。电话是:

sXslPath = Server.MapPath("xsl\transform.xsl")

有些时候MapPath会按预期返回“c:\ inetpub \ wwwroot \ testapp \ xsl \ transform.xsl”,有时会错误地返回“c:\ inetpub \ wwwroot \ testapp \ testfolder \ XSL \ transform.xsl“即可。错误的路径显然会导致严重的问题。

2 个答案:

答案 0 :(得分:2)

我在这里回答我自己的问题:

出现此问题是因为在 Application_OnStart 中调用时, MapPath 错误地包含导致应用程序启动的页面上下文。如果应用程序尚未启动时要运行的第一个ASP页面不在虚拟根目录的根目录中,那么 MapPath 会混淆并将所调用的ASP页面的路径添加到它返回的路径中

例如,如果启动应用程序的页面位于“c:\ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ test.asp”,则MapPath会错误地添加“\ folder1 \ folder2“进入路径中间并返回”c:\ inetpub \ wwwroot \ testapp \ folder1 \ folder2 \ xsl \ transform.xsl“

如果您的网站只在根文件夹中包含文件,或者在 global.asa 中没有使用 MapPath ,那么您将永远不会注意到这一点奇怪。我怀疑有很多ASP Classic网站因为这个而无法正常启动,但是他们的主人只是做了一个快速的iisreset,不知道出了什么问题。

结果是,如果您的网站的ASP文件不是根文件夹,那么您无法在 global.asa 中可靠地使用 MapPath

如果是一次性网站,那么最简单的解决方案就是硬编码您在 global.asa 中使用的所有路径。

如果您基于ASP Classic向其他人销售产品,则无法对路径进行硬编码。您必须将 MapPath 的所有用法移出应用程序启动,或者通过将路径作为安装程序的一部分写入ASP文件来处理问题。

答案 1 :(得分:0)

或者使用 sXslPath = Server.MapPath(“\ xsl \ transform.xsl”)

然后将映射根目录

的路径

当然,如果您在不是服务器的操作系统中开发iis,root将成为默认网站,您必须记住更改部署...