c# - "Length cannot be less than zero."在空行

标签 c# asp.net

我不断收到上述错误消息,即使我注释掉了发生错误的行。知道是什么原因造成的吗?我尝试用测试值重写这些行,但我仍然遇到同样的错误。

这在 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/

相关文章:

c# - ASP.NET Entity Framework NotSupportedException

javascript - 通过 AJAX 请求发送 ® 字符时出现问题

c# - 加密 URL 中的路由数据

c# - 如何在主页上显示动态时钟?

c# - 用于后续加载的 Javascript 事件,例如 window.onload

c# - AJAX 调用的空白输出

c# - 指定要使用的 MSDataSetGenerator 工具版本?

c# - 使用 SignalR 推送通知

c# - 在 C# 中更快地反转图像

c# - 使用 Excel 工作表作为 DB(带连接字符串的数据源)