2011-04-12 80 views
5

我不斷收到上面的錯誤消息,即使我註釋了錯誤發生的行。任何想法可能會造成這種情況?我試着用測試值重寫行,但我仍然得到相同的錯誤。「長度不能小於零」。在一個空行

這在調試模式下很好地工作,它只在部署中出現。

原始代碼:

Line 21:    string domain, username; 
Line 22:    string text = Page.User.Identity.Name; 
Line 23: 
Line 24:    domain = text.Substring(0, text.IndexOf("\\")); 
Line 25:    username = text.Substring(text.IndexOf("\\") + 1, text.Length - text.IndexOf("\\") - 1); 

Source File: F:\<file path>\Default.aspx.cs Line: 23 

測試代碼(同樣的錯誤):

Line 21:    string domain, username; 
Line 22:    //string text = "TEST"; // Page.User.Identity.Name; 
Line 23:    // this line is blank 
Line 24:    domain = "TEST"; //text.Substring(0, text.IndexOf("\\")); 
Line 25:    username = "TEST"; // text.Substring(text.IndexOf("\\") + 1, 

Source File: F:\<file path>\Default.aspx.cs Line: 23 

這裏的堆棧跟蹤,如果有幫助的所有:

[ArgumentOutOfRangeException: Length cannot be less than zero. 
Parameter name: length] 
System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +12681546 
Insufficiencies._Default.Page_Load(Object sender, EventArgs e) in F:\<file path>\Default.aspx.cs:23 
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25 
System.Web.UI.Control.LoadRecursive() +71 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3048 
+0

在接下來的幾行代碼中會發生什麼?我想這個錯誤是存在的(堆棧跟蹤中的行號有時會有點混亂)。 – 2011-04-12 10:20:50

+0

在此之前,只有一些變量的初始化和''using'標記的集合,根本沒有函數調用。 – Lyise 2011-04-12 10:55:09

回答

14

text.IndexOf("\\")將回到-1如果它在字符串中找不到「\」。

您正在將-1傳遞給Substring()方法,該方法無效。

如果該站點未運行,並且在該站點的IIS中專門啓用了Windows集成身份驗證,則該Page.User.Identity.Name將返回空字符串。

用戶可能會在匿名身份驗證下訪問該站點。

http://msdn.microsoft.com/en-us/library/ff647405.aspx

配置Windows身份驗證

  • 啓動Internet Information Services(IIS)。
  • 用鼠標右鍵單擊您的應用程序的虛擬目錄,然後單擊屬性。
  • 單擊目錄安全性選項卡。
  • 在匿名訪問和身份驗證控制下,單擊編輯。
  • 確保沒有選中匿名訪問複選框,並且集成Windows身份驗證是唯一選中的複選框。
  • 在您的應用程序的Web.config文件或機器級別的Web.config文件中,確保身份驗證模式設置爲Windows,如下所示。

<system.web> ... <authentication mode="Windows"/> ... </system.web>

+0

非常感謝,我仍然遇到同樣的錯誤,但我認爲它可能是我更改的其中一個設置,導致同一問題仍然出現。我要嘗試重置所有設置並再次嘗試。 – Lyise 2011-04-12 10:53:15

4
text.IndexOf("\\") 

這將返回-1,如果字符的索引中沒有找到,並採取了從子字符0-1長度將拋出這個錯誤。

ASP.net c#的另一個警告是,子字符串的長度參數也不能大於實際字符串(經典ASP允許你這樣做)。

試試這個:

int SlashPos = text.IndexOf("\\"); 
if(SlashPos > 0) 
    domain = text.Substring(0, SlashPos); 
else 
    domain = text; 
1

你傳遞一個數字小於零到Substring通話。我懷疑你的初始化字符串的例子,「TEST」有同樣的問題...

4

變量text不包含\\子從而text.IndexOf("\\")返回-1這的確是Substring無效的參數。

要解決這個問題,您可以使用這樣的代碼,當找不到反斜槓時,它將分配整個text

int backSlashIndex = text.IndexOf("\\"); 
domain = (backSlashIndex >= 0) ? text.Substring(0, backSlashIndex) : text; 
相關問題