0

ロード時に関数を呼び出すと、エラーがそれを示しています。公開時のみのデバッグでインデックスが範囲外のエラーになりません。

    {
        string strLogonUser = Request.ServerVariables["LOGON_USER"];
        var credential = strLogonUser.Split(@"\".ToCharArray())[1];




        cnn.Open();
        SqlTransaction tran = cnn.BeginTransaction();
        cmd.Connection = cnn;
        cmd.Transaction = tran;
        cmd.CommandText = "StoredProcedure";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@UserLogin", SqlDbType.NVarChar).Value = credential;
        cmd.ExecuteNonQuery();


    }




    [IndexOutOfRangeException: Index was outside the bounds of the array.]
   _Default.ReadUser() +357
   _Default.Page_Load(Object sender, EventArgs e) +46
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   System.Web.UI.Control.LoadRecursive() +66
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428
4

3 に答える 3

5

サーバー変数にバックスラッシュが含まれていない場合、間違いなくそのエラーが発生LOGON_USERします...単一要素配列の要素1(2番目の要素)を取得します。

分割する前に、値を記録するためにログを追加する必要があるようです。

于 2012-09-17T19:20:36.010 に答える
1

"LOGON_USER"変数のチェックを追加できますか:

string strLogonUser = Request.ServerVariables["LOGON_USER"];

if(String.IsNullOrEmpty(strLogonUser))  // <<<<<<
    throw new ArgumentException();  

var credential = strLogonUser.Split(@"\".ToCharArray())[1];

この変数が設定されていないようです。

于 2012-09-17T19:21:48.693 に答える
1

ほとんどの場合、匿名アクセスを許可しているため、その変数には空白の文字列が含まれます

于 2012-09-17T19:22:21.003 に答える