我继承了一个经典的 ASP 应用程序。有各种各样的事情需要整理,但我不得不逐渐做事情(我不能对每个脚本都进行全面更改)。
系统中有一些地方带有硬编码的 url。一些脚本必须在升级到 live 之前进行更改,以便将测试 web 根名称更改为实时 web 根名称。我正在寻找避免这种情况的方法(基本上以编程方式计算服务器)。
这并不难。对 Request("SERVER_NAME") 和这类事情的简单检查:
appName = Request.ServerVariables("SCRIPT_NAME")
i = InStr(2, appName, "/") 'keep initial "/"
If i > 0 Then
appName = Left(appName, i)
End If
这在“无处不在”的脚本中就可以解决问题。然后只需设置一个全局变量来保存完整的“http(s)://server/app/”或 MakeUrlAbsolute() 的函数即可。
然而,这对我来说有点可疑。这不是更好地存储在应用程序级别吗?这建议在 Global.asa 中进行设置,例如:
Sub Application_OnStart()
Application("WebRoot") = ...
End Sub
但现在我无法获得 SERVER_NAME,所以我只剩下 2 个不同的 Global.asa 文件(每个环境一个)。
这是我唯一的选择吗?解决 Application_OnStart 中的每个请求或硬代码?也许使用 Session_OnStart 会是一种妥协。或者是否有一些巧妙的技巧可以访问 Application_OnStart 中的信息?也许人们会选择硬编码,因为 Global.asa 不经常更改。