"Length cannot be less than zero." on a blank line

65,657

Solution 1

text.IndexOf("\\") will be returning -1 if it cannot find "\" in the string.

You are passing -1 through to the Substring() method, which is invalid.

The Page.User.Identity.Name will return an empty string if the site is not run with windows integrated authentication exclusively enabled in IIS for that site.

Users will likely be accessing the site under anonymous authentication.

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

To configure Windows authentication

  • Start Internet Information Services (IIS).
  • Right-click your application's virtual directory, and then click Properties.
  • Click the Directory Security tab.
  • Under Anonymous access and authentication control, click Edit.
  • Make sure the Anonymous access check box is not selected and that Integrated Windows authentication is the only selected check box.
  • In your application's Web.config file or in the machine-level Web.config file, ensure that the authentication mode is set to Windows as shown here.

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

Solution 2

The variable text contains no \\ substring thus text.IndexOf("\\") returns -1 which is indeed invalid argument for Substring.

To fix this, you can use such code that will assign the whole text when backslash is not found.

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

Solution 3

text.IndexOf("\\")

This will return -1 if the index of the characters is not found, and taking a substring from character 0 with length of -1 will throw that error.

Another caveat of ASP.net c# is that the length parameter of a sub string also can't be larger than the actual string (Classic ASP lets you do this).

Try this:

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

Solution 4

You are passing a number less than zero into the Substring call. I doubt your example of initializing the string to "TEST" has the same problem...

Share:
65,657

Related videos on Youtube

Lyise
Author by

Lyise

Updated on July 09, 2022

Comments

  • Lyise
    Lyise almost 2 years

    I keep getting the above error message, even if I comment out the line that the error is occurring on. Any idea what could be causing this? I've tried re-writing the lines with test values, but I still get the same error.

    This works perfectly in debug mode, it's only in the deployment that this came up.

    Original code:

    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 
    

    Test code (same error):

    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 
    

    Here's the stack trace if it helps at all:

    [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
    
  • Lyise
    Lyise about 13 years
    Thanks a lot for this, I'm still getting the same error, but I think it may be one of the other settings that I changed which is causing the same issue to appear still. I'm going to try resetting all of the settings and trying this again.

Related