【问题标题】:System.IndexOutOfRangeException: Index was outside the bounds of the array application in IISSystem.IndexOutOfRangeException:索引超出了 IIS 中的数组应用程序的范围
【发布时间】:2022-11-14 11:06:03
【问题描述】:

当我传输我的应用程序时(使用 Windows 身份验证)

User.Identity.Name.Split('\\')[1];   

像上面一样。

在 iis 中抛出错误,但它在本地运行良好。

System.IndexOutOfRangeException: Index was outside the bounds of the array.

我启用了 Windows 身份验证。我哪里错了?

【问题讨论】:

  • 好吧,错误似乎很清楚。您尝试获取 Split() 结果的第二个元素,但如果 Split() 函数没有返回任何内容,那么它将产生 IndexOutOfRangeException。检查 Split() 的结果是否返回任何内容。
  • 调试您的应用程序,您会注意到您的用户名根本没有斜线,因此Split 将只提供一个只有一个元素的数组 - 整个名称。但是,由于数组索引是从零开始的,因此您需要使用 Split(...)[0] 来访问它。
  • 它给了我我在视觉工作室的用户名。我检查了它。但是在我将应用程序发布到 iis 之后,它会抛出错误。如果我不使用拆分。 User.Identity.Name 它给我域/用户名。但我只想用户名。
  • 但是您使用\ 进行拆分,而不是使用/。
  • 所以我需要这样使用它吗? txt_Username.Text = User.Identity.Name.Split(...)[0];

标签: c# asp.net iis web-applications iis-express


【解决方案1】:

您使用的唯一索引是 1 因此,如果超出范围,则数组中必须只有一个元素,这意味着输入中没有斜杠。你想要的是数组中的最后一个元素,不管是一个元素还是两个元素,所以改用User.Identity.Name.Split('\').Last()。

【讨论】:

  • 错误 CS1061 'string[]' 不包含 'Last' 的定义,并且找不到接受类型为 'string[]' 的第一个参数的可访问扩展方法 'Last'(您是否缺少 using 指令或程序集引用? )
  • @Suisenra,它是 Enumerable.Last 扩展方法,因此您需要引用适当的程序集并导入适当的命名空间。这通常是默认完成的,但如果不是,或者您删除了它,您可以添加它。
  • @Suisenra,请注意,看起来这个答案可能是不必要的,因为您对该问题的评论似乎表明您指定要拆分您实际上不想拆分的字符。
  • 对不起,我不擅长。你能给我举个例子吗?
  • 也许我应该再写一次。我的代码在本地运行良好,但是当我发布它并运行 iis 时,它会抛出错误。你的最后一条评论我不明白。我真的好难站...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多