Iis Microsoft VBScript运行时错误';800a0009';下标超出范围:';[编号:1]';Include/Security.inc,第28行
我在一个迁移项目中工作 我正在尝试迁移经典的asp应用程序。我不擅长经典ASP 我从服务器上获取了代码,并试图在我的机器上运行它。但是得到以下错误 Microsoft VBScript运行时错误“800a0009” 下标超出范围:“[编号:1]” /Include/Security.inc,第28行 请找到我得到错误的代码块Iis Microsoft VBScript运行时错误';800a0009';下标超出范围:';[编号:1]';Include/Security.inc,第28行,iis,vbscript,asp-classic,Iis,Vbscript,Asp Classic,我在一个迁移项目中工作 我正在尝试迁移经典的asp应用程序。我不擅长经典ASP 我从服务器上获取了代码,并试图在我的机器上运行它。但是得到以下错误 Microsoft VBScript运行时错误“800a0009” 下标超出范围:“[编号:1]” /Include/Security.inc,第28行 请找到我得到错误的代码块 Function StringConvUN dim tabConv dim rmLocation dim username username
Function StringConvUN
dim tabConv
dim rmLocation
dim username
username = Ucase(Request.ServerVariables("LOGON_USER"))
if UCase(Request.ServerVariables("HTTP_AUTHORIZATION")) = "SITEMINDER" then
StringConvUN = username
else
tabConv = split(username, "'")
rmLocation = join(tabConv, "''")
tabConv = split(rmLocation , "\")
StringConvUN = tabConv(1)
end if
End Function
我得到了第28行的错误,这是
StringConvUN=tabConv(1)
同样的代码在IIS 6服务器中运行良好。但在我的机器和新的IIS7.5服务器中,它给出了上述错误。请在这方面帮助我。在获取第一个元素之前,您应该检查
StringConvUN
是否为空
看。这是一个自制的函数,用于检查数组是否为空。您可能需要检查IIS中是否使用了正确的身份验证方法,以及Amesshel上面提到的内容。但是这里的代码看起来有点混乱
tabConv=split(用户名“”)
rmLocation=join(tabConv,“”)
tabConv=split(rmLocation,“\”)
StringConvUN=tabConv(1)
为什么不将Request.ServerVariables(“LOGON\u USER”)
的初始副本中的单引号替换为双引号,如下所示:
username=Replace(Request.ServerVariables(“登录用户”),“”,“”)
您可以简单地使用Instr
和Mid
的组合来获得您想要的字符串
tabconv=Mid(UCase(替换(Request.ServerVariables(“登录用户”),“,”)_
Instr(Request.ServerVariables(“登录用户”),“\”+1)
但是首先检查IIS。不要在数组中查找位置1(在本例中不存在位置1),而是尝试在数组中取最后一个位置,即“\”之后的所有位置
StringConvUN = tabConv(uBound(tabConv))
如果数组为空,uBound不会返回错误吗?@andydavey:为什么?如果数组的第一个位置不存在,那么最后一个位置肯定不存在。此外,数组是根据“\”字符的位置将字符串分成若干部分生成的。检查原始字符串,则无需检查可能未定义的数组。在OPs示例中,如果“用户名”不包含“\”,则uBoud将返回-1-尽管数组仍然为空。。。这导致Paul的评论…@Paul-你说得对-如果在IIS上设置了正确的身份验证方法,那么“Request.ServerVariables(“LOGON\u USER”)”将返回一些内容。如果返回了某个内容,则无论登录名是否包含“\”,使用数组(uBound(array))都将返回一个值。剥猫皮的方法不止一种。@AndyDavey:即使IIS身份验证设置不正确,结果值也将是一个空字符串,仍然可以很容易地进行测试,不会出现错误。答案确实更好。