我想重定向到网址,但如果失败则会收到通知。
据我所知,一个简单的try-catch块在这里不起作用,因为Redirect 总是引发异常。虽然我可以检查该异常(ThreadAbortException),但这是最好的方法吗?
编辑:我正在尝试重定向到某个网址,如果它不存在,则转到另一个网址。
答案 0 :(得分:4)
由于重定向是客户端操作(服务器只是发送代码为302且标头location
设置为重定向目标的响应),因此如果重定向成功,您不能指望服务器端Request.Redirect
调用给您任何指示在客户端(或者即使它将被遵循)。
您可以选择:
不幸的是,查看目标页面是否存在的所有服务器端选项都存在严重缺陷:
答案 1 :(得分:2)
我认为这段代码不会赢得奖品,但这至少可以防止ThreadAbortException ......
的启发bool redirectOK = false;
try
{
Repsonse.Redirect(url, false);
redirectOK = true;
}
catch(Exception exp)
{
// log/handle/whatever
}
if (redirectOK)
{
// do what even you want for a serverside succeeded redirect
}
else
{
// do what ever you want for a failure to redirect
}
答案 2 :(得分:0)
好吧,这将检查404错误,如果没有错误则直接到页面。
if URLExists(theURL){
Response.Redirect(theUrl);
}
else{
//redirect somewhere else
}
public static bool UrlExists(string url)
{
try
{
if (url == "")
{
return false;
}
else
{
new System.Net.WebClient().DownloadData(url);
return true;
}
}
catch (System.Net.WebException e)
{
try
{
if (((System.Net.HttpWebResponse)e.Response).StatusCode == System.Net.HttpStatusCode.NotFound)
return false;
else
throw;
}
catch
{
return false;
}
}
}