我想重定向到一个 url,但如果它失败了会被通知。
据我所知,一个简单的 try-catch 块在这里不起作用,因为重定向总是抛出异常。虽然我可以检查该异常(ThreadAbortException),但这是最好的方法吗?
编辑:我正在尝试重定向到某个 url,如果它不存在 - 到另一个 url。
由于重定向是客户端操作(服务器只是发送带有代码 302 的响应并将标头location
设置为重定向目标),因此您不能指望服务器端Request.Redirect
调用会在客户端上成功重定向(或者即使它会被遵循)给您任何指示。
您的选择:
不幸的是,所有用于查看目标页面是否存在的服务器端选项都有严重的缺点:
我不认为这段代码会获奖,但这至少可以防止 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
}
好吧,这将检查 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;
}
}
}