我一直收到上面的错误消息,即使我注释掉了发生错误的行.知道是什么原因引起的吗?我已经尝试用测试值重写行,但我仍然得到相同的错误.
这在调试模式下完美运行,只有在部署中才会出现这种情况.
原始代码:
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
Run Code Online (Sandbox Code Playgroud)
测试代码(相同的错误):
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
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪,如果它有帮助:
[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
Run Code Online (Sandbox Code Playgroud)
Dav*_*ale 16
text.IndexOf("\\")-1如果在字符串中找不到"\",将返回.
您正在传递-1给该Substring()方法,该方法无效.
该Page.User.Identity.Name会返回一个空字符串,如果该网站不与IIS专门启用了该网站的Windows集成身份验证运行.
用户可能会以匿名身份验证访问该站点.
来自http://msdn.microsoft.com/en-us/library/ff647405.aspx:
配置Windows身份验证
<system.web>
...
<authentication mode="Windows"/>
...
</system.web>
该变量不text包含\\子串,因此text.IndexOf("\\")返回-1,这确实是无效的参数Substring.
要解决此问题,您可以使用这样的代码,text在找不到反斜杠时分配整个代码.
int backSlashIndex = text.IndexOf("\\");
domain = (backSlashIndex >= 0) ? text.Substring(0, backSlashIndex) : text;
Run Code Online (Sandbox Code Playgroud)
text.IndexOf("\\")
Run Code Online (Sandbox Code Playgroud)
如果找不到字符的索引,则返回-1,并且从0长度为的字符中获取子字符串-1将抛出该错误.
ASP.net c#的另一个警告是子字符串的长度参数也不能大于实际字符串(Classic ASP允许你这样做).
试试这个:
int SlashPos = text.IndexOf("\\");
if(SlashPos > 0)
domain = text.Substring(0, SlashPos);
else
domain = text;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47630 次 |
| 最近记录: |