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(第二个元素)。

听起来您应该在拆分之前添加更多日志记录以记录该值。

于 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 回答