我想重定向到一個url,但是如果它失敗,會被通知。什麼是嘗試Response.Redirect的正確方法?
據我所知,一個簡單的try-catch塊不會在這裏工作,因爲重定向總是引發異常。儘管我可以檢查該異常(ThreadAbortException),但是這是最好的方法嗎?
編輯:我想重定向到一個特定的網址,如果它不存在 - 到另一個網址。
我想重定向到一個url,但是如果它失敗,會被通知。什麼是嘗試Response.Redirect的正確方法?
據我所知,一個簡單的try-catch塊不會在這裏工作,因爲重定向總是引發異常。儘管我可以檢查該異常(ThreadAbortException),但是這是最好的方法嗎?
編輯:我想重定向到一個特定的網址,如果它不存在 - 到另一個網址。
啓發因爲重定向是客戶端操作(服務器簡單用代碼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;
}
}
}
如果失敗並且顯示消息,則不會重定向。你的意思是如果重定向失敗?你不知道目標網址?什麼 ? – Aristos
@Aristos這是我的問題 - 我如何通知它失敗了。 - 我的意思是 - 如何通知計劃。 – ispiro
如果您需要知道如此重要,那麼您需要在目標網址上添加信號。如果你只是想知道目標網址是否存在,那麼你簡單地檢查出來之前,重定向與來自代碼背後的URL調用。 – Aristos