[英]Array: “Index was outside the bounds of the array”
我的Web應用程序出現以下錯誤: “索引超出了數組的范圍。”
奇怪的是,問題只出現在我的網絡服務器上(Windows Server 2008 R2,.Net 4.0,Windows 7 Enterprise 64 Bit)。
當我在Visual Studio中調試網站時,一切都很完美
該代碼如下所示:
我定義一個數組並將其提供給“CheckUserRights”類
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不包含DOMAIN \\ USERNAME會發生什么?
可以改寫為
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選擇可以返回NO ROWS。 因此,每當你執行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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.