Iis 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

我在一个迁移项目中工作

我正在尝试迁移经典的asp应用程序。我不擅长经典ASP

我从服务器上获取了代码,并试图在我的机器上运行它。但是得到以下错误

Microsoft VBScript运行时错误“800a0009”

下标超出范围:“[编号:1]”

/Include/Security.inc,第28行

请找到我得到错误的代码块

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身份验证设置不正确,结果值也将是一个空字符串,仍然可以很容易地进行测试,不会出现错误。答案确实更好。