代码之家  ›  专栏  ›  技术社区  ›  andynormancx

经典ASP服务器。MapPath()在global.asa中无法按预期工作

  •  2
  • andynormancx  · 技术社区  · 16 年前

    在传统ASP中, 服务器。MapPath() 它并不总是能正常工作 应用程序_启动 global.asa .我有一个ASP页面 “\testfolder\test.asp” 在虚拟根目录中,我有一个XSLT文件 “\xsl\transform.xsl” 。我的虚拟根位于 “c:\inetpub\wwwroot\testapp\” .

    我用 虚拟路径

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

    有时MapPath会返回 “c:\inetpub\wwwroot\testapp\xsl\transform.xsl” 正如预期的那样,其他时候它会错误地返回 “c:\inetpub\wwwroot\testapp\ \xsl\transform.xsl“ 错误的路径显然会导致严重的问题。

    2 回复  |  直到 16 年前
        1
  •  2
  •   andynormancx    16 年前

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

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

    则MapPath将错误地添加 “\folder1\folder2” 进入路径中间并返回 “c:\inetpub\wwwroot\testapp\folder1\folder2\xsl\transform.xsl”

    如果您的网站只有根文件夹中的文件或不使用 虚拟路径 在……里面 global.asa 那么你永远不会注意到这个小奇怪。我怀疑有很多ASP Classic网站有时会因此而无法正常启动,但他们的所有者只是做了一个快速的iisreset,不知道出了什么问题。

    其结果是,您无法可靠地使用 虚拟路径 在……里面 global.asa 如果您的网站在根文件夹之外的任何地方都有ASP文件。

    如果这是一个一次性网站,那么最简单的解决方案就是对你使用的任何路径进行硬编码 global.asa .

    如果你基于ASP Classic向其他人销售产品,那么硬编码路径是不可行的。您要么必须移动所有使用 虚拟路径 退出应用程序启动,或者通过将路径作为安装程序的一部分写入ASP文件来处理该问题。

        2
  •  0
  •   yawn yawn    15 年前

    或者使用 sXslPath=服务器。MapPath(“\xsl\transform.xsl”)

    然后,它将映射根目录的路径

    推荐文章