【问题标题】:IndexOutOfRangeException: Index was outside the bounds of the arrayIndexOutOfRangeException:索引超出了数组的范围
【发布时间】:2014-01-10 16:34:20
【问题描述】:

我在尝试剥离 AD 中的域名时遇到错误。这是我的代码:

        string strAccount = HttpContext.Current.User.Identity.Name.ToString();
        string strUserName = strAccount.Split("\\\\".ToCharArray())[1];
        txtStrName.Text = strUserName;

        string selectSQL = "SELECT sAMAccountName, mail FROM ActiveDirectories WHERE mail Is Not Null and sAMAccountName = '" + txtStrName.Text + "'";
        SqlConnection con = new SqlConnection(connString);
        SqlCommand cmd = new SqlCommand(selectSQL, con);
        SqlDataReader reader = default(SqlDataReader);
        try
        {
            con.Open();
            reader = cmd.ExecuteReader();
            reader.Read();


            txtADName.Text = reader["sAMAccountName"].ToString();
            txtEmail.Text = reader["mail"].ToString();
        }
        finally
        {
            reader.Close();
            con.Close();
        }

这似乎是我进行拆分的地方。我想不通。有人可以帮忙吗。谢谢!!

【问题讨论】:

  • 你有一个 SQL 注入漏洞。
  • 我认为你是对的,但我似乎无法弄清楚。通过查看我的代码,您能看到我可能做错了什么吗?提醒您,这只发生在 IIS 7 中。

标签: asp.net c#-4.0


【解决方案1】:

为什么不只是"\\" 而不是"\\\\"?看起来您正在拆分 2 个反斜杠,而应该只有一个。

另外,请确保结果数组中有多个项目,然后再尝试处理第二项。

【讨论】:

    【解决方案2】:

    HttpContext.Current.User.Identity.Name 可能不包含“\”字符?

    【讨论】:

      【解决方案3】:

      假设您的strAccount 始终保证看起来像“域\用户”,您的拆分应该如下所示:

      string strUserName = strAccount.Split('\\')[1];
      

      您可以使用 Linq 速记检查拆分的所需部分(正如 BartVG 指出的那样):

      string strUserName = strAccount.Split('\\').Last();
      

      如果 strAccount 不包含预期的分隔符,它将简单地返回值。

      【讨论】:

      • 我尝试了 .Last,现在我仅在 IIS 7 中发布时收到一条错误消息,指出没有数据时读取数据的尝试无效。我对 IIS 7 和设置 SQL 数据连接非常陌生,所以我不知道我做错了什么。当我在本地调试它时它工作正常,但发布时我不断收到数据未连接的错误。如果可以,请提供帮助。
      • @sshackles 您面临的问题与原来的问题不同。据我从您的代码中可以看出,您的数据库查询很可能不会返回任何结果。继续阅读有关数据库查询的一些教程 - 只需指向 SqlDataReader 并点击 F1,Visual Studio 将带您进入 MSDN 中的相关部分。
      【解决方案4】:

      您访问拆分中的第二个项目。你确定你的意思不是[0]? 你应该检查它是否有任何元素。

      var elements = strAccount.Split("\\\\".ToCharArray());
      var strUserName = elements.Count() > 1 ? elements[1] : "";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多