Microsoft VBScript运行时错误'800a0009'下标超出范围:'[number:1]'Include / Security.inc,第28行

时间:2015-04-10 11:09:57

标签: iis vbscript asp-classic

我在迁移项目中工作。

我试图迁移经典的asp应用程序。我不擅长Classic ASP。

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

  

Microsoft VBScript运行时错误'800a0009'

     

下标超出范围:'[数字:1]'

     

/Include/Security.inc,line 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服务器中正常运行。但是在我的机器和新的IIS 7.5服务器中,它给出了上述错误。请帮助我。

3 个答案:

答案 0 :(得分:1)

您可能需要检查是否在IIS中使用了正确的身份验证方法,以及Amessihel上面提到的内容。但这里的代码看起来有点乱......

tabConv = split(username, "'")
rmLocation = join(tabConv, "''")
tabConv = split(rmLocation , "\")
StringConvUN = tabConv(1)

为什么不在Replace的初始副本中Request.ServerVariables("LOGON_USER")单引号加双打,如下所示:

username = Replace(Request.ServerVariables("LOGON_USER"), "'", "''")

您可以简单地使用InstrMid的组合来获取您想要的字符串...

tabconv = Mid(UCase(Replace(Request.ServerVariables("LOGON_USER"), "'",   "''")), _
  Instr(Request.ServerVariables("LOGON_USER"), "\") + 1)

但请先检查IIS。

答案 1 :(得分:0)

在获取第一个元素之前,您应该检查StringConvUN是否为空......

this answer。这是一个自制函数,用于检查数组是否为空。

答案 2 :(得分:-2)

不是在数组中查找位置1(在这种情况下不存在),而是尝试获取数组中的最后一个位置,即“\”之后的所有位置

StringConvUN = tabConv(uBound(tabConv))