索引超出数组的范围

时间:2011-04-07 04:44:36

标签: c# asp.net

在本地我的系统工作期间但是当我在现场上传它时我遇到了问题.. 我需要一些dll吗?

  

索引超出了数组的范围     异常详细信息:System.IndexOutOfRangeException:索引超出了数组的范围。

Line 6:      if (Request.Params["mode"] != null) Mode = Request.Params["mode"];
Line 7:      if (!Path.Split('/')[3].Equals("Default.aspx") && (String)Session["accesslevel"] == ("0"))

5 个答案:

答案 0 :(得分:4)

如果我不得不猜测我会说这可能就是这样:

Path.Split('/')[3]

如果你在http://localhost/myapp下运行,那么在调用Path.Split后,你在阵列中拥有的元素比在http://www.myapp.com下运行时要多。有可能你在生产中只有3个元素,而不是你可能在dev中的4个元素。

修改

对于您发布的页面,对Request.Path的调用将返回:

"/backend/default.aspx"

当您对'/'进行拆分时,您只会返回3个元素:

[0] = ""
[1] = "backend"
[2] = "default.aspx"

这就是为什么Path.Split('/')[3]会抛出IndexOutOfRangeException的原因。所以简短的回答是你应该在生产中将它切换到Path.Split('/')[2],但更好的解决方案是提出一种在两种环境中使用相同代码处理案例的方法。

答案 1 :(得分:3)

我认为问题在这里Path.Split('/')[3],数组长度小于4。

答案 2 :(得分:2)

问题出在这种情况; if (!Path.Split('/')[3].Equals("Default.aspx")这可能是服务器路径与本地主机不同的原因。

替换此if (!Path.Split('/')[3].Equals("Default.aspx")

if (!Path.Split('/')[2].Equals("Default.aspx")

答案 3 :(得分:1)

Path.Split似乎是个问题。为什么不使用Uri类来解析url。

答案 4 :(得分:1)

而不是

if (!Path.Split('/')[3].Equals("Default.aspx") && (String)Session["accesslevel"] == ("0"))

使用它:

Path.SubString(Path.LastIndexOf('/')).Equals("Default.aspx") .....