数组:“索引在数组边界之外”
本文关键字:数组 边界 索引 | 更新日期: 2023-09-27 18:33:41
我在 Web 应用程序上收到以下错误:"索引超出了数组的范围。
奇怪的是,问题只出现在我的网络服务器上(Windows Server 2008 R2,.Net 4.0,Windows 7 Enterprise 64位)。
当我在Visual Studio中调试网站时,一切都很完美
代码如下所示:
我定义了一个数组并将其提供给类"用户查核权限"
string NTLogin = Page.User.Identity.Name.ToString().Split(new char[] { '''' })[1].ToUpper();
string[] allowedRoles = new string[2] { "Administrator", "Superuser" };
CheckUserRights Check = new CheckUserRights(NTLogin, allowedRoles);
该类如下所示:
//Lokale Variablen definieren
string strUserName;
string strRolename;
string[] AllowedRoles;
bool boolAuthorized;
//Im Konstruktor definierte Werte übergeben.
public CheckUserRights(string Username, string[] Roles)
{
this.strUserName = Username;
this.AllowedRoles = Roles;
getRoleForUser();
checkRights();
}
...
...
我在 4 小时后搜索了解决方案,但找不到任何东西。我不是专业人士,这是我第一次使用数组。
可能是服务器上的错误配置吗?
我感谢每一个帮助。谢谢!
更新
解决了,服务器配置中存在问题。解决方案就在史蒂夫的回答中。
该代码中存在许多问题,但是,坚持问题标题上的问题,我认为这一行看起来很可疑:
string NTLogin = Page.User.Identity.Name.ToString().Split(new char[] { '''' })[1].ToUpper();
如果 Page.User.Identity.Name 不包含域''用户名,会发生什么情况?
可以改写为
string[] nameparts = Page.User.Identity.Name.ToString().Split(new char[] { '''' });
string NTLogin = (nameparts.Length == 2 ? nameparts[1] : nameparts[0]).ToUpper();
if(NTLogin.Length == 0)
return;
为什么此属性可能是错误?看看这篇文章
1)你的代码容易受到getRoleForUser中第一个选择的SQL注入攻击。 您应该使用 SqlParameter。
2) 如果没有堆栈跟踪,则很难确定错误的位置。 但是,我认为sql选择可能不返回行。 因此,每当您执行r.Read
时,请将其更改为 if (!r.Read()) return;
。
同样,如果您发布堆栈跟踪,我们可以提供更好的帮助。
我是如何解决的,如下所示:
Dim strname() As String
For indx = 0 To (strname.Length - 1)
If strname(indx) = "" Then
Else
ListBox1.Items.Add(strname(indx))
End If
Next