我有一个绑定到asp.net转发器控件的数据集
其中一列是外部网页的打开图形图像的网址。
我将url存储在我的数据库中,但是在一段时间后发现有些停止显示,可能是因为图像网址已经更改。因此,我想检查图形图像网址是否返回响应,如果没有,则返回我的占位符网址。我不想替换我的数据库中的url,以防它是一个临时问题 - 我不想丢失原始URL。
假设我创建数据集的代码是:
SqlCommand countMostRead = new SqlCommand(getMostread, dbcon);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(countMostRead);
da.Fill(ds);
rptLatest.DataSource = ds;
rptLatest.DataBind();
图形图像网址是数据集中的第一列,有没有办法检查每行的数据集列0,如果图形图像网址不存在则更改它?
我想我需要在column0上运行foreach,运行我的httpweb请求
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "HEAD";
bool exists;
try
{
request.GetResponse();
exists = true;
return exists;
}
catch
{
exists = false;
return exists;
}
如果httpwebrequest返回false,则将列数据更改为我的占位符网址。
但是,我不确定这是否确实是正确的方法,如果是这样,那么正确的语法是什么?
有人可以建议实现此目的的代码吗?或者,如果我正在咆哮错误的树,请提出另一种方法。
编辑 - 作为暂定的刺,我试过这个:
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
string imgURL = row[0].ToString();
bool graphImageExists = graphImageExists(imgURL);
if (graphImageExists)
{
}
else
{
row[0] = "my placeholder";
}
}
}
graphImageExists()运行httpwebrequest。这不会返回错误,但在必要时似乎没有将数据更改为占位符 - 有任何建议吗?
答案 0 :(得分:0)
我认为您的方法还可以。 只要您不尝试下载该文件,就可以使用HttpWebRequest发送HEAD请求(以检查该文件是否存在):
HttpWebResponse resp = null;
var req = (HttpWebRequest)WebRequest.Create("the URL");
req.Method = "HEAD";
resp = (HttpWebResponse)req.GetResponse();
如果您收到WebException,则表示该文件不存在。
希望它有所帮助。
答案 1 :(得分:0)
我想我现在明白了。您的问题似乎是在尝试对转发器的源进行数据绑定后尝试更改URL。在您对转发器的源进行数据绑定之前,请尝试进行URL检查;如果不可能,请使用Repeater.ItemDataBound事件 ( https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound(v=vs.110).aspx)
希望这有帮助。
答案 2 :(得分:0)
将此代码放入事件中:
string imgURL = row[0].ToString();
bool graphImageExists = graphImageExists(imgURL);
if (graphImageExists)
{
}
else
{
row[0] = "my placeholder";
}