我有一个非常奇怪的问题,我从其他网站下载html(这不是非法的)。
string img_1 = startHTML.Substring(startHTML.IndexOf("img"));
它工作得很完美,但突然停止并显示此错误:
System.ArgumentOutOfRangeException:StartIndex不能小于零。参数名称:位于System.String.Substring(Int32 startIndex)的System.String.InternalSubStringWithChecks(Int32 startIndex,Int32 length,Boolean fAlwaysCopy)的startIndex
奇怪的是,在localhost上它仍在工作。
我知道这个错误意味着什么,以及如何处理它,但这次完全不同。
try
{
string img_1 = startHTML.Substring(startHTML.IndexOf("img"));
img_1 = img_1.Substring(0, img_1.IndexOf("</div>"));
if (img_1.Contains("<a href="))
{
}
else
{
string img_3 = "";
string img_7 = img_1.Substring(img_1.IndexOf("src="));
string img_2 = img_7.Substring(0, img_7.IndexOf(".jpg") + 4);
img_3 = img_2.Substring(img_2.IndexOf("src=\"") + 5);
img_3 = img_3.Trim();
lastImage = img_3;
}
}
catch (Exception ee)
{
try
{
string img_1 = startHTML.Substring(startHTML.IndexOf("class=\"poster\""));
img_1 = img_1.Substring(0, img_1.IndexOf("</div>"));
if (img_1.Contains("<a href="))
{
}
else
{
string img_3 = "";
string img_7 = img_1.Substring(img_1.IndexOf("src="));
string img_2 = img_7.Substring(0, img_7.IndexOf(".jpg") + 4);
img_3 = img_2.Substring(img_2.IndexOf("src=\"") + 5);
img_3 = img_3.Trim();
lastImage = img_3;
}
lblMsg.Text = "NO IMAGE! " + Convert.ToString(ee);
}
catch(Exception eeеее)
{
lblMsg.Text = "NO IMAGE! " + Convert.ToString(eeеее);
}
}
return lastImage;
在第一次尝试上的 localhost 上,没有 catch 。但是在服务器上,第二个尝试会遇到此问题,并且不应该进行第二次尝试,因为第一次尝试< / strong> on localhost执行正确
我在这里红了并在谷歌搜索,但没有找到任何东西。可能是一些文化问题,如果是的话,有人可以在哪里阅读如何修复它?并且有可能, startHTML 字符串在第二次尝试时变为空我复制错误并将其粘贴到谷歌上。我在第一页打开了所有链接。但没有人回答我的问题。
答案 0 :(得分:1)
这意味着您传递给搜索的文本不再包含搜索字符串,即“img”
要解决此问题,请在方法调用之外调用IndexOf,将其结果分配给变量,并在将其用作索引之前将其检查为-1:
var pos = string img_1 = startHTML.IndexOf("img");
if (pos >= 0) {
string img_1 = startHTML.Substring(Pos);
...
}