簡體   English   中英

數組:“索引超出了數組的范圍”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM