2011-04-07 100 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") .....