4

Web アプリケーションで次のエラーが発生します。「インデックスが配列の範囲外です。」

奇妙なことに、問題は私の Web サーバー (Windows Server 2008 R2、.Net 4.0、Windows 7 Enterprise 64 ビット) でのみ発生します。

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 時間後に解決策を検索しましたが、何も見つかりません。私はプロではありませんが、配列を使用したのはこれが初めてです。

サーバーの構成が間違っている可能性はありますか?

私はすべての助けに感謝しています。ありがとう!

アップデート

解決しました。サーバー構成に問題がありました。解決策は、Steve からの回答にあります。

4

3 に答える 3

5

そのコードには多くの問題がありますが、質問のタイトルの問題に固執すると、次の行が疑わしいと思います。

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;            

このプロパティがエラーになるのはなぜですか? この記事を見て

于 2012-05-08T13:54:36.397 に答える
1

1) あなたのコードは、getRoleForUser の最初の選択で SQL インジェクション攻撃に対して脆弱です。SqlParameter を使用する必要があります。

2) スタック トレースがないと、エラーの場所を特定するのが難しくなります。ただし、SQL 選択で NO ROWS が返される可能性があると思います。したがって、 を実行するたびにr.Read、 に変更しif (!r.Read()) return;ます。

繰り返しますが、スタック トレースを投稿していただければ、より役立つことができます。

于 2012-05-08T13:57:42.110 に答える
0

私が解決した方法は次のとおりです。

Dim strname() As String
For indx = 0 To (strname.Length - 1)
    If strname(indx) = "" Then
    Else
        ListBox1.Items.Add(strname(indx))
    End If
Next
于 2012-10-09T04:37:26.583 に答える