我不断收到上述错误消息,即使我注释掉了发生错误的行。知道是什么原因造成的吗?我尝试用测试值重写这些行,但我仍然遇到同样的错误。
这在 Debug模式下工作得很好,它只在部署中出现。
原代码:
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
最佳答案
text.IndexOf("\\")
如果在字符串中找不到“\”,将返回 -1
。
您正在将 -1
传递给 Substring()
方法,这是无效的。
如果站点运行时未在 IIS 中专门为该站点启用 Windows 集成身份验证,则 Page.User.Identity.Name
将返回一个空字符串。
用户可能会在匿名身份验证下访问该站点。
来自 http://msdn.microsoft.com/en-us/library/ff647405.aspx :
配置 Windows 身份验证
- 启动 Internet 信息服务 (IIS)。
- 右键单击应用程序的虚拟目录,然后单击“属性”。
- 单击“目录安全”选项卡。
- 在匿名访问和身份验证控制下,点击编辑。
- 确保未选中匿名访问复选框,并且集成 Windows 身份验证是唯一选中的复选框。
- 在应用程序的 Web.config 文件或机器级 Web.config 文件中,确保将身份验证模式设置为 Windows,如此处所示。
<system.web>
...
<authentication mode="Windows"/>
...
</system.web>
关于c# - "Length cannot be less than zero."在空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5633661/