好的,这是一个随机错误。我正在动态地将图像添加到html页面。图像位于我无法控制的另一台服务器上。图像的名称如下: imageName10.jpg imageName11.jpg imageName13.jpg imageName14.jpg imageName16.jpg imageName17.jpg imageName19.jpg
让我们看一下上面的图片列表。我想获得所有图像,但我不知道有多少图像。我知道它以字符串“imageName”开头,数字在10到20之间,然后以字符串“.jpg”结束。我决定创建一个从10到20的循环,创建图像名称并将图像标记添加到我的html。这有效,但我不想添加损坏的链接,所以我想先检查图像是否存在。为此,我使用WebRequest获取图像URL,超时为5秒。如果它超时,它基本上会跳过链接并继续循环。
String dynamicHtmlStr = String.Empty;
dynamicHtmlStr += "<TABLE>";
WebRequest webReq = null;
WebResponse webResp = null;
for (int i = 10; i < 20; i++)
{
try
{
webReq = WebRequest.Create("http://www.someurl.com/image/imageName" + i + ".jpg");
webReq.Timeout = 5000;
webResp = webReq.GetResponse();
dynamicHtmlStr += "<TR>";
dynamicHtmlStr += "<TD>";
dynamicHtmlStr += "<IMG http://www.someurl.com/image/imageName" + i + ".jpg"\">";
dynamicHtmlStr += "</TD>";
dynamicHtmlStr += "</TR>";
}
catch (Exception)
{
}
}
dynamicHtmlStr += "</TABLE>";
return dynamicHtmlStr;
我的问题是: webrequest第一次失败后。之后的所有其他Web请求似乎也失败了。例如,拍摄上面的图像列表。循环从10开始。它执行Web请求以查看“imageName10.jpg”是否存在,获得良好响应,我将html字符串添加到dynamicHtmlStr变量。它再次循环,这次是在11,并且eveything仍然很好。然后我们继续到12. 12是假的并且没有添加到dynamicHtmlStr,因为它不存在,这是正确的。我们转移到13确实存在,但是这也失败了,之后的所有其他网络请求,无论它是否存在。
这对我没有意义。我做错了吗?
答案 0 :(得分:2)
我必须说,情况有点奇怪。
我倾向于使用HttpWebRequest
/ HttpWebResponse
类,并直接使用这些类。
创建请求后,您可以在此处查看响应:
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
{
// Put in code to check response status. You'll probably get a 404 when not found.
}
}
}
另一个注意事项:我知道循环大小很小,但您应该总是尝试使用StringBuilder
进行迭代字符串连接。
答案 1 :(得分:1)
我遇到了同样的问题。
根据此链接的示例:http://msdn.microsoft.com/en-us/library/system.net.webrequest.begingetresponse.aspx
发出一个response.GetResponseStream()。Close();在响应之前.Close();或者在使用段结束之前,可能会解决问题。