2011-04-07 102 views
0

在本地我的系统在工作,但当我上传它时,我现场遇到问题.. 我需要一些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")) 
+0

你能告诉我们,你的路径有哪些? – 2011-04-07 04:49:12

+0

http://philmont.com.ph/backend/default.aspx – 2011-04-07 04:52:03

+1

你可以改变你的条件if(!Path.Split('/')[2] .Equals(“Default.aspx”) – 2011-04-07 04:54:00

回答

4

如果我猜我会说这可能是这样的:

Path.Split('/')[3] 

如果你http://localhost/myapp下运行,你将有更多的元素调用Path.Split后的数组比如果您在http://www.myapp.com下运行。有机会,你只有3个元素在制作中,而不是你可能在开发中的4个元素。

编辑:

为您发布的页面,到Request的调用会返回:

"/backend/default.aspx" 

当你在“/”做了拆分,你只要找回3个元素:

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

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

2

的问题是在这种状态下; if (!Path.Split('/')[3].Equals("Default.aspx")这可能是服务器路径不会像它在本地主机上的原因。

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

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

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

+0

nope,我想因为在我的本地运行正常.. – 2011-04-07 04:50:41

1

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

1

而不是

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

使用本:

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