[ASP.NET]Response.Redirect所引發的ThreadAbortException
在ASP.NET程式中,在切換頁面時,常常會直接呼叫Response.Redirect("OtherPage"),所以這時會引Call Response.End()然後Thread.Abort(),然後就引發ThreadAbortException。
然而看似正常的動作,如果系統有寫Log的話,就會常常記錄到這類的訊息,對系統Debug也沒有幫助。
所以我們可參考「Handling ThreadAbortException with Response.Redirect() : Best possible approaches」,如果錯誤不是ThreadAbortException才記錄,或是在底層的Page中去建立Redirect的Method,然後把Exception吃掉,如下
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an un-handled error occurs
Exception ex = Server.GetLastError();
System.Threading.ThreadAbortException exception = ex as System.Threading.ThreadAbortException;
if (exception == null)
{
//Log or report only if this is not ThreadAbortException
Logger.LogException(ex);
}
}
以下是在底層的Page中去建立Redirect的Method,然後把Exception吃掉,系統就直接Call Redirect不要用Response.Redirect。
protected void Redirect(string url)
{
try
{
Response.Redirect(url);
}
catch
{
//把錯誤給吃掉
}
}
詳細資訊,請參考:Handling ThreadAbortException with Response.Redirect() : Best possible approaches
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^